私はウェブ検索を行い、以下を含むbashで変数を使用することに関するいくつかの記事を読みました。ウィキペディアFOO_VARIABLE=foo;./test
しかし、Bashで実行してもテスト結果が次のような結果を得られない$FOO_VARIABLE
理由は理解できませんfoo
。
デフォルトでは、プロセスが作成されると、子プロセスを作成するときに親プロセスによって行われた明示的な変更を除いて、親プロセスの反復環境が継承されます。
また読んで下さい:環境変数継承の例外
「明示的な変更に加えて」:FOO_VARIABLE=foo ./test
-test
スクリプトがわかりますFOO_VARIABLE
が、最初の方法ではなぜわかりませんか?
echo $0
-bash
cat ./test
echo $MY_TEST
MY_TEST=test$MY_TEST
echo $MY_TEST
MY_TEST=ret;./test
test
CentOS 7およびMacオペレーティングシステムでテストされました。
次に追加:
https://stackoverflow.com/questions/9772036/pass-all-variables-from-one-shell-script-to-another
2番目の方法はソースコードを取得することです(最初のスクリプトから2番目のスクリプトを呼び出す)。そうする必要はありませんexport
。私の場合はなぜ違うのですか?
上記で編集されました:これは私が急いで詳細に多くの注意を払わないことです。.
今読んだので、ソーシング部分で1つ(ポイント)を逃しました。https://superuser.com/questions/176783/what-is-the-difference-Between-executing-a-bash-script-vs-commerce-itこの部分はすべて明確です。
https://askubuntu.com/questions/26318/environment-variable-vs-shell-variable-whats-the-difference はい、私はローカルですが、継承(フォークコール)を介して渡されないのはなぜですか?
ベストアンサー1
最初のコマンドでは
FOO_VARIABLE=foo;./test
FOO_VARIABLE
シェル変数に値を割り当てます。次に電話をかけます./test
。エクスポートされないため、FOO_VARIABLE
環境変数ではないため、実行しているスクリプトやプログラムから継承されません。そのため、./test
変数がわかりません。
簡単に言えば、「ここ」にシェル変数を設定しましたが、「そこ」(in)では使用できません./test
。
他のコマンドでは
FOO_VARIABLE=foo ./test
FOO_VARIABLE
環境に設定した値(つまり、./test
名前が環境変数の生成)です。この変数は、現在の環境では環境変数やシェル変数に設定されておらず、実行によって生成されたプロセスにのみ適用されます。./test
FOO_VARIABLE
./test
つまり、環境変数を「./test
ここ」ではなく「そこ」(in)に設定します。
FOO_VARIABLE
スクリプトまたはプログラムが既存の変数を環境変数として継承するようにするには、それを使用する必要がありますexport
。つまり、ここで環境変数を作成する必要があります。
FOO_VARIABLE=foo
export FOO_VARIABLE
./test
またはより短く
export FOO_VARIABLE=foo
./test
./test
これにより、変数はローカルに設定され、生成されたすべてのプロセス(例:)で使用できます。