コマンドラインで環境変数を設定し、両方のコマンドに影響を与えるようにします。

コマンドラインで環境変数を設定し、両方のコマンドに影響を与えるようにします。

コマンドは期待どおりに機能します。

> TEST=`uuidgen` sh -c 'echo "$TEST"'
BE6DFB7B-D872-49D7-91E6-24D01644B0A2
> echo $TEST
[empty line]

TESTコマンドラインでローカルに変数を設定し、echoコマンドでそれをエコーし​​ます。この行が実行された後はTEST設定されなくなります。

しかし、これは

> TEST=`uuidgen` sh -c 'echo "$TEST"' && sh -c 'echo "$TEST"'                                          
52EFFEAA-D094-4FC3-8212-6A294918E265
[empty line]

最初のコマンドには変数が設定されていますが、TESTには&&設定されていません。両方注文する。これを達成するための最良の方法は何ですか?

答え1

同じシェルを使用して両方のコマンドを実行できます。

TEST=`uuidgen` sh -c 'echo "$TEST" && echo "$TEST"'

答え2

もしあなたならいいえ変数の割り当てを一時的に(つまり、1つのコマンドに対してのみ)、目的の次の別々の行に割り当てます。

さまざまなタイプの変数への割り当てのいくつかの例:

  1. TEST=foo echo "$TEST"
    

    これは一時的にfoo変数に値を割り当てますTESTそしてTEST)を次のように一時的にエクスポートします。ただその唯一のechoコマンド。その後、以前の値(およびエクスポートされた状態)に戻ります。値がない場合は設定されません。

  2. TEST=foo
    echo "$TEST"
    NEWTEST="$TEST"
    

    この例では、TESTはfooシェルが終了するか(ログアウトやスクリプトの終了など)、明示的に設定を解除するか、新しい値が割り当てられるまでその値を持つため、NEWTESTは最終的にTEST(foo)と同じ値になります。

    TESTはエクスポートされないため、このシェルで実行されているプログラムのコンテキストでは使用できません。

  3. プログラムが実行されている環境で変数を使用できるようにするには、その変数をエクスポートする必要があります。

    例えば

    export TEST=foo
    

    または:

    TEST=foo
    export TEST
    

答え3

フルシェルセッションのexport TEST=bla変数を設定するために使用されます。TEST

$ export TEST="coincoin"
$ echo $TEST
coincoin
$ cat test.sh 
#!/bin/bash

echo "Test is ${TEST}"
$ ./test.sh 
Test is coincoin

関連情報