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}")