我有一个 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