web-dev-qa-db-ja.com

cshの「setenv」とbashの「export」のスコープ

私が読んだところによると、cshのsetenvとbashのexportは同等です。しかし、2つを操作しているときに、いくつかの奇妙な問題を見つけました。

PuTTYを開いて入力を開始すると、次のようになります。

setenv TEMP yes
echo $TEMP  //this give me "yes"

それから私はbashに行き、タイプします

echo $TEMP //this give me "yes" as well

ただし、逆の順序で実行すると、同じ結果は得られません。具体的には、最初にbashに移動して、

export TEMP=no
echo $TEMP //this give me "no"

次に、cshに戻って入力します

echo $TEMP // this give me "Undefined Variable"

それは私にも「ノー」を与えるべきではありませんか?私は何かが足りないのですか?

ありがとうございました!

7
Dao Lam

変数をエクスポートするということは、その変数のコピーが、新しく作成された子プロセスの環境に配置されることを意味します。これは変数のコピーです。子プロセスが変数を変更した場合、親は変更を認識しません。さらに、子が変数をエクスポートする場合、その変数は親に表示されません。

したがって、2つのケースは非対称です。 cshで開始し、変数をエクスポートしてからbashを開始すると、bashはエクスポートされた変数を確認します。次に、bashで新しい変数をエクスポートし、bashを終了してcshに戻ると、bashセッションで作成されたすべての変数が消えます。

Bashで変数をエクスポートしてから、(cshと入力して)子cshを起動すると、エクスポートされた変数がほぼ確実に表示されます。

9
rici