bash 脚本在第一次循环后丢失只读值

bash 脚本在第一次循环后丢失只读值

我有一个 bash 脚本,在第一次通过 for-in 循环后,它似乎丢失了只读常量的值。例如:

#!/bin/bash
readonly DIR="./groups/"
for output in "${array[@]}"
do
   catstring+="$DIR$output "
done
printf "$catstring"
cat $catstring > outputfile

该数组中有一堆名称,例如:file1 file2 file3 等。

printf 语句的输出是“./groups/file1 file2 file3”。我期待的是“./groups/file1 ./groups/file2 ./groups/file3”。

为什么 bash 在第一次通过 for-in 循环后会丢失 $DIR 的值?

答案1

您很可能已经通过以下方式捕获了文件列表:

array=$(ls file* )
#or
array="$(ls file*)"

# array looks like:
# array[0]="file1 file2 file3"

您可以使用额外的“(”和“)”来捕获像这样的数组中的多个索引

array=( $(ls file*) )

# array looks like:
# array[0]="file1"
# array[1]="file2"
# array[2]="file3" 

然后你的代码就可以工作了

或者您可能使用“read”来读取值:

ls > files.txt
read array < files.txt

那么你想使用“read -a”来代替

read -a < files.txt

相关内容