次のサンプル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"