bash 스크립트는 첫 번째 루프 후 읽기 전용 값을 잃습니다.

bash 스크립트는 첫 번째 루프 후 읽기 전용 값을 잃습니다.

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

관련 정보