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