シェルスクリプトで配列にコマンドを割り当てるとうまくいきませんか?

シェルスクリプトで配列にコマンドを割り当てるとうまくいきませんか?

端末でコマンドを実行すると、配列が割り当てられます。

$ 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[@]}

関連情報