Bash: 数组的元素多于指定的
Bash: Array has more elements than specified
我正在制作一个 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 没有按我预期的方式运行。但是unset命令后的数组是空的,一直没找到解释。这种数组行为的原因是什么?我该如何解决?
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}")
我正在制作一个 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 没有按我预期的方式运行。但是unset命令后的数组是空的,一直没找到解释。这种数组行为的原因是什么?我该如何解决?
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}")