次のシェルスクリプトがあります
TEST=/foopath
export TEST
test.sh
というファイルにあり、ここでchmod +x test.sh
を実行しました
./test.sh
を実行すると、echo $TEST
を実行して出力/foopath
を表示できると思いますが、何も表示されません。
上記のスクリプトが$TEST
を実行したときに変数./test.sh
をエクスポートするために必要な変更は何ですか。これはbashとzshの違いですか?
それは親対子シェルの違いです。
test.sh
を実行すると、新しいシェルが起動してそれを実行します。変数はそのシェル内でエクスポートされます。つまり、新しいシェルはそれを認識しており、それ自体の子も認識しています。 test.sh
を開始した親シェルはまったく影響を受けません(影響を受けません)。
現在のシェルで変数を表示するには、代わりにスクリプトを入手する必要があります。
. test.sh
(.
とtest.sh
の間にはスペースを入れます)。これは、新しいシェルを開始せずにtest.sh
を実行します。