bash: FOO_VARIABLE=foo;./test foo 変数がテストに渡されませんでした。なぜ継承されないのですか?

bash: FOO_VARIABLE=foo;./test foo 変数がテストに渡されませんでした。なぜ継承されないのですか?

私はウェブ検索を行い、以下を含む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名前が環境変数の生成)です。この変数は、現在の環境では環境変数やシェル変数に設定されておらず、実行によって生成されたプロセスにのみ適用されます。./testFOO_VARIABLE./test

つまり、環境変数を「./testここ」ではなく「そこ」(in)に設定します。

FOO_VARIABLEスクリプトまたはプログラムが既存の変数を環境変数として継承するようにするには、それを使用する必要がありますexport。つまり、ここで環境変数を作成する必要があります。

FOO_VARIABLE=foo
export FOO_VARIABLE
./test

またはより短く

export FOO_VARIABLE=foo
./test

./testこれにより、変数はローカルに設定され、生成されたすべてのプロセス(例:)で使用できます。

おすすめ記事