我正在制作一个shell脚本来一次操作n个文件。 n个文件存储在一个数组中。但是,在while循环的第一次迭代之后,数组变得大于n。
即。如果我在695个文件上运行脚本,那么该数组将保存100个文件,然后在while循环中保存200,300,395,295,最后保持195个。
shopt -s nullglob
file_arr=(*.extension)
len_file_arr=${#file_arr[@]}
count_first=0
count_last=100
while (("$count_last" <= "$len_file_arr"))
do
tf_array=("${file_arr[@]:${count_first}:${count_last}}")
tf_comma_list=$(IFS=,; echo "${tf_array[@]}")
echo ${#tf_array[@]}
# manipulation files
count_first=$((count_first+100))
count_last=$((count_last+100))
unset -v 'tf_array'
done
tf_array=("${file_arr[@]:${count_first}:${len_file_arr}}")
# manipulate left over files
我相信未设置的功能不如我期望的那样。但是,unset命令后的数组为空,我无法找到解释。这种数组行为的原因是什么,我该如何修复它?
答案 0 :(得分:2)
bash数组切片具有以下语法:
${array_name[@]:start:count}
不
${array_name[@]:start:end}
你不应该像在这一行中那样递增count_last:
count_last=$((count_last+100))
并更改while循环条件。 要么, 改变
tf_array=("${file_arr[@]:${count_first}:${count_last}}")
到
tf_array=("${file_arr[@]:${count_first}:100}")