bashのコマンドに環境変数を渡す

bashのコマンドに環境変数を渡す

次のサンプルbashコマンドがあります。

FILE='/tmp/1.txt' echo "file: $FILE"

出力は次のとおりです

file:

出力に以前に定義された変数FILEが含まれていないのはなぜですか?

答え1

走るとき

FILE='/tmp/1.txt' echo "file: $FILE"

シェルは割り当てを実行する前に$ FILE変数を拡張するため、以前にFILEが設定されていないと仮定すると、次のようになります。

FILE='/tmp/1.txt' echo "file: "

まず、FILEを既知の値に設定してこの動作を確認できます。

FILE="foo"
FILE='/tmp/1.txt' echo "file: $FILE"

2行目は次のように展開されます。

FILE='/tmp/1.txt' echo "file: foo"

次に、このコマンドのコンテキスト内でFILE値が/tmp/1.txt。その後、シェルが実行されます。echo "file: foo"

@admstgが答えで述べたように、次のことができます。

FILE='/tmp/1.txt'; echo "file: $FILE"

ただし、動作は最初に試したものとは異なります。最初は、echoコマンド中にのみFILEを設定します。上記のコードは、シェル期間中(または明示的に設定解除されるまで)FILEを設定します。

答え2

これら2つのコマンドを;で区切る必要があります。変数を定義するには、変数を呼び出します。

同じシェルから変数を呼び出すときに変数をエクスポートする必要はありません。

これは働きます:

FILE='/tmp/TEST.txt' ;  echo "file : $FILE"

関連情報