for-inループを最初に通過した後、読み取り専用定数の値を失ったように見えるbashスクリプトがあります。たとえば、
#!/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」です。
for-inループを初めて通過した後、bashが$ 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