GNU/Linux >> Linux の 問題 >  >> Linux

このシェル/bash構文:Somevariable =somevalue Somecommand?

この質問にはすでに回答があります :変数の割り当て後に同じ行でコマンドを実行することはシェルポータブルですか?

(4つの回答)
2年前に閉鎖されました。

同僚の1人が、私がよく知らないBash構文を提供してくれました。私のGooglefooは、それが何をするのか、そしてなぜ/いつそれを使うべきなのかを理解するのに失敗しました。

彼が私に送ったコマンドは次の形式でした:

someVariable=something 
command

当初、これは次のようなものだと思いました:

someVariable=something ; command

または

someVariable=something 
command

しかし、これは事実ではないようです。例:

[Jan-03 11:26][~]$ # Look at the environment variable BAZ. It is currently empty
[Jan-03 11:26][~]$ echo $BAZ

[Jan-03 11:27][~]$ # Try running a command of the same format    
[Jan-03 11:27][~]$ BAZ=jake echo $BAZ

[Jan-03 11:27][~]$    
[Jan-03 11:27][~]$ # Now, echo BAZ again. It is still empty:    
[Jan-03 11:27][~]$ echo $BAZ

[Jan-03 11:27][~]$    
[Jan-03 11:28][~]$    
[Jan-03 11:28][~]$ # If we add a semi-colon to the command, we get dramatically different results:
[Jan-03 11:28][~]$ BAZ=jake ; echo $BAZ
jake
[Jan-03 11:28][~]$
[Jan-03 11:28][~]$ # And we can see that the variable is actually set:
[Jan-03 11:29][~]$ echo $BAZ
jake
[Jan-03 11:29][~]$

この構文は何をしますか?設定された変数はどうなりますか?なぜこれが機能するのですか?

承認された回答:

これは次と同等です:

( export someVariable=something; command )

これにより、someVariable 割り当てられた値を持つ環境変数。ただし、実行中のコマンドのみ。

bashの関連部分は次のとおりです マニュアル:

簡単なコマンド

単純なコマンドは、一連のオプションの変数割り当てです。 空白で区切られた単語とリダイレクトが続き、制御オペレーターによって終了されます。最初のワードは実行するコマンドを指定し、引数ゼロとして渡されます。残りの単語は、呼び出されたコマンドに引数として渡されます。

(…)

シンプルなコマンド拡張

[コマンド拡張から]コマンド名が表示されない場合、変数の割り当ては現在のシェル環境に影響します。それ以外の場合、変数は実行されたコマンドの環境に追加され、現在のシェル環境には影響しません

注:これはbashに固有のものではないことに注意してください 、ただしPOSIXで指定されています。

関連:Debian – CIFS共有が同じファイルを複数回表示するのはなぜですか?

編集–回答のコメントからの要約されたディスカッション

BAZ=JAKE echo $BAZの理由 、JAKEを出力しないのは、変数の置換が何よりも先に行われるためです。変数の置換をバイパスすると、これは期待どおりに動作します:

$ echo_baz() { echo "[$BAZ]"; }
$ BAZ=Jake echo_baz
[Jake]
$ echo_baz
[]

Linux
  1. 実際の例を含む Bash シェルの終了ステータスのチュートリアル

  2. 15 の便利な Bash シェル組み込みコマンド (例付き)

  3. 6 Linux の Bash シェル コマンド ライン チェーン演算子

  1. Bashでプログラミングする方法:構文とツール

  2. Bashシェルのカスタマイズ:コマンドを太字/色で表示しますか?

  3. *nix でポイント コマンド `.` のヘルプを見つけるにはどうすればよいですか?

  1. Linux での Bash シェルの変数について

  2. Bash スクリプト:セッションをログに記録するための bash スクリプトからのスクリプト コマンドの使用

  3. bash エクスポート コマンド