1

スクリプトをbashする必要があります:

script1.sh

HELLO=hello
export HELLO
./script2.sh
echo $HELLO

script2.sh

echo $HELLO
HELLO=world
export $HELLO

出力はhello hello代わりにhello world. 相互に呼び出すスクリプト間で変数を変更するにはどうすればよいですか?

編集:変数を引数として渡すことはできません。script2.sh で変更される可能性のある変数の数がわかりません。

4

4 に答える 4

3

2 番目のスクリプトを子プロセスとして実行したくない場合は、それをソースする必要があります。

HELLO=hello
export HELLO
. ./script2.sh  # Note the dot at the beginning
echo $HELLO

2 番目のスクリプトでは、エクスポートは必要ありません。変数をエクスポートするように bash に既に指示しています。

于 2012-07-24T12:22:53.933 に答える
1

./script2.sh で新しいスクリプトを呼び出すと、新しいシェルがフォークされ、script2 の実行が完了すると新しいシェルが閉じられます。制御がスクリプトに戻ると、まだ古いシェルであるため、script2 でエクスポートされた変数は使用できません。script2 を同じシェルで実行するには、「. ./script2.sh」のように実行します。

HELLO=hello
export HELLO
. ./script2.sh
echo $HELLO
于 2012-07-24T12:33:28.343 に答える
1

エクスポートされた変数はサブシェルで使用できますが ( script2.shvsの場合と同様script1.sh)、親シェルでは使用できません。

このため、 で設定した変数script1.shは で使用できますがscript2.sh、 で設定してもwhenscript2.shで使用できるようにはなりません。script1.shscript2.sh

変数を呼び出し元に戻す場合は、それが必要echoであり、の出力を取得しますscript2.sh。ただし、script2.shその出力を確認したい場合は、stderr に書き込む必要があります。

script1.sh:

HELLO=hello
export HELLO
HELLO=$(./script2.sh)
echo >&2 $HELLO

script2.sh:

echo $HELLO >&2
HELLO=world
echo $HELLO
于 2012-07-24T12:23:24.293 に答える
0

の環境には、script1.shが含まれていますHELLO=hello。あなたが子供に何をしても、それscript2.shは変わりません。

于 2012-07-24T12:17:00.420 に答える