1

ソースコマンドで使用する次のbashスクリプト(「env.bash」という名前)があります。

#!/bin/bash
FOO=/some/path

次に、次のbashスクリプト(「compile.bash」という名前)があります。

#!/bin/bash
if [ -z "$FOO" ]; then
    echo "Need to set FOO, did you forget to source env.bash?"
    exit 1
fi 
./compile-something

ただし、私がそうする場合:

source env.bash
./compile.bash

「FOOを設定する必要があります」というメッセージが表示されるのはなぜですか。$ FOOをエコーすると、その値がうまく表示されます。

4

1 に答える 1

5
export FOO=/some/path

これは機能するはずです。その理由は、シェルスクリプトが、環境の独自のコピーを持つサブシェルで実行されるためです。スーパーシェルの変数は通常は表示されません。を実行するexportと、エクスポートされた変数のコピーをサブシェルで使用できるようになります。

編集:不正確さを削除しました。また、良い点をありがとう@DonCallisto。

于 2012-05-26T14:32:03.297 に答える