쉘 스크립트에서 배열에 명령을 할당하면 작동하지 않습니까?

쉘 스크립트에서 배열에 명령을 할당하면 작동하지 않습니까?

터미널에서 명령을 실행하면 배열이 할당됩니다.

$ FILES=($(ls ~/Desktop/TEST/))
$ echo ${FILES[@]}
file1.txt file2.txt file3.txt

하지만 터미널을 닫고 쉘 스크립트에서 실행하면 빈 줄이 나타납니다.

$ ./TEST.txt 
$ echo ${FILES[@]}

$ 

테스트해 보니 echo $?true/ 가 반환됩니다 0.

무슨 일이 일어나고 있는지 모르시나요?

답변1

이는 echo명령이 스크립트의 일부가 아니기 때문입니다. 스크립트는 서브셸에서 실행되며 스크립트가 끝나면 FILES변수를 더 이상 사용할 수 없습니다. 이 FILES변수를 현재 쉘에서 사용할 수 있게 하려면 다음을 사용하십시오.

$ source ./TEST.txt
$ echo ${FILES[@]}

관련 정보