答え1
コマンドラインでは、変数バインディングはコマンドラインが実行されるまで発生しません。ただし、$file
コマンドが拡張されるとパラメーター置換が発生し、これは実行前に発生する必要があります。
この問題に対する解決策は、コマンドを関数に入れることです。
fun()
{
echo "file = " $file
}
file=abc fun
答え2
注文する
file="test" echo $file
出力されませんtest
。コマンドを実行する前に拡張が行われます。。これを見てください:
$ set -x
$ foo='hello' echo $foo
+ foo=hello
+ echo
シェルコマンドの代わりにUnixシェルスクリプトを実行しても同じことは起こりません。例えば、
foo='hello' /path/to/script.sh
この場合、foo='hello'
割り当ては最初に解決された後に/path/to/script.sh
実行されます。
一部より早いそして関連 郵便永続変数の割り当て+ CLIコマンドのための提案された解決策:
foo='hello' bash -c 'echo $foo'
:シェルスクリプトを使用することはお勧めできません!単純なコマンドの詳細な方法です。(){ local var=value; echo "1: $var"; }; echo "2: $var"
:機能を使用することはお勧めできません!単純なコマンドの長い方法です。TEST=foo && echo $TEST
A:シンプルだが粘り強いです。
私が出る道は
(file="test"; echo $file)
サブシェルを作成すると、シェル変数を作成し、echo
それをコマンド内で使用してから、そのコマンドの外部に保持されません。