スクリプトから変数にアクセスできるようにする方法[閉じる]

スクリプトから変数にアクセスできるようにする方法[閉じる]

Ubuntu 16.04では、2つの異なるスクリプト(スクリプト2とスクリプト3)を独自に実行する1つのスクリプト(スクリプト1)を実行しました。

${x}スクリプト3には、スクリプト2()で宣言された変数の変数置換()が含まれていますx=y

もちろん、スクリプト3を実行する前にsourceスクリプト2を実行して、将来のスクリプト3または他の場所で変数の置換を許可するようにしてください。


問題は、スクリプト1を介してスクリプト3を実行すると変数の置換が失敗し、結果が完璧ではなく、手動実行では成功することです。


スクリプト1を介してスクリプト3を実行すると変数置換が失敗しますが、手動で実行すると成功するのはなぜですか.

スクリプト2が十分でsourcingない場合はわかりません。

答え1

これは変数スコープの問題であり、スクリプトがコマンドラインで手動で実行されるのか、他のスクリプトによって実行されるのかはまったく関係ありません。

環境にエクスポートされていないシェル変数は、子プロセス(サブシェルを含む)には表示されません。

script2内部でソーシングする場合の範囲内で発生するため、 で定義されたすべての変数が表示されscript3ます。内部と内部の両方のソースを使用する場合、結果はほぼ同じです(ただし、この場合はすべての範囲内で発生します)。script3script2script3script2script3script1script1

ただしscript2、内部でソーシングする場合は、script1次のようにします(いいえソース)script3fromのscript1場合、script3定義または変更された変数のみが表示されます(script2エクスポートされた場合)。

変数がエクスポートされる限り、いつどこで変数をエクスポートするかは重要ではありません。今後 script3処刑される。変数は、実行が開始された親シェル(または対応する.profile / .bashrc / etc)script1から、またはそのシェルからエクスポートすることもできます。script2script1

関連情報