他のシェルで環境変数を変更すると、他のシェルでも変更されますか、それともそのまま残りますか?

他のシェルで環境変数を変更すると、他のシェルでも変更されますか、それともそのまま残りますか?

Bashで環境変数を作成する場合は、SPORT = baseballと言ってからtcshに切り替えて「running」に変更します。 bashに戻すと、SPORTは「実行中」と表示されますか? (自分で試してみたいのですが、bashだけです)

ベストアンサー1

以下は、あなたが要求した操作を正確に実行し、bash環境変数を設定してから、tcshその値を開始して変更する実際の実験です。次に、の値を確認してくださいbash

#!/bin/bash

export SPORT=baseball
printf 'SPORT is "%s"\n' "$SPORT"

tcsh -c 'echo $SPORT; setenv SPORT archery; echo $SPORT'

printf 'SPORT is "%s"\n' "$SPORT"

このbashスクリプトを実行すると、呼び出しのtcsh結果は次のようになります。

SPORT is "baseball"
baseball
archery
SPORT is "baseball"

tcshしかし、これが実際に動作することを見るために切り替える必要さえありません。(...)スクリプトbashに別々の環境を持つサブシェルを導入するだけで十分です。

#!/bin/bash

export SPORT=baseball
printf 'SPORT is "%s"\n' "$SPORT"

(
    echo "$SPORT"
    export SPORT=archery
    echo "$SPORT"
)

printf 'SPORT is "%s"\n' "$SPORT"

出力は変更されません。

ある環境は他の環境に影響を与えることはできません。しかし、1つの例外があります。: 新しい環境は親環境の環境変数を継承します。前の例のようなサブシェルも、エクスポートされていないシェル変数を継承します。

おすすめ記事