シェルでコマンド寿命変数を設定するには? [コピー]

シェルでコマンド寿命変数を設定するには? [コピー]

次の例を考えてみましょう。

file="test" echo $file

私の考えは、file命令の期間だけ持続することですecho $file$fileこのコマンド以降は持続しませんが、設定されていないかechoのように何も印刷されません。$file

コマンドの存続期間中に有効な変数をシェルで設定できますか?

編集する:提案されているように、シェルスクリプトや関数を使用したくありません。みんな これら 関連 質問

答え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コマンドのための提案された解決策:

  1. foo='hello' bash -c 'echo $foo':シェルスクリプトを使用することはお勧めできません!単純なコマンドの詳細な方法です。
  2. (){ local var=value; echo "1: $var"; }; echo "2: $var":機能を使用することはお勧めできません!単純なコマンドの長い方法です。
  3. TEST=foo && echo $TESTA:シンプルだが粘り強いです。

私が出る道は

(file="test"; echo $file)

サブシェルを作成すると、シェル変数を作成し、echoそれをコマンド内で使用してから、そのコマンドの外部に保持されません。

関連情報