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

Bashで合法的なコマンドの前に変数を設定するのはなぜですか?

区切り文字で区切られたテキストファイルの解析など、構成を使用するいくつかの回答に遭遇しました:

while IFS=, read xx yy zz;do
    echo $xx $yy $zz
done < input_file

ここで、IFS 変数はreadの前に設定されます コマンド。

私はbashリファレンスを読んでいますが、これが合法である理由を理解できません。

試しました

$ x="once upon" y="a time" echo $x $y

bashコマンドプロンプトからですが、何もエコーされませんでした。誰かが、IFS変数をそのように設定できるようにする参照でその構文が定義されている場所を教えてもらえますか?それは特別な場合ですか、それとも他の変数と同様のことをすることができますか?

承認された回答:

関連情報は、BASHメンテナが提供するマニュアルページにあります(最終チェックは2020年8月)。セクションシェル文法、単純なコマンドの状態(強調が追加されました):

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

したがって、任意の変数を渡すことができます。あなたのecho 変数はシェルに設定されておらず、コマンドに渡されるため、exampleは機能しません。シェルは$xを展開します および$y コマンドを呼び出します。これは、たとえば次のように機能します。

$ x="once upon" y="a time" bash -c 'echo $x $y'
once upon a time

Linux
  1. Bashスクリプト(I)

  2. BashスクリプトのRmコマンドは変数では機能しませんか?

  3. コマンド出力を bash の変数にリダイレクトすると失敗する

  1. bash の変数を持つエイリアス

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

  3. Bashのコマンド置換への変数代入の終了コード

  1. jenkins パイプラインで bash コマンドを実行する

  2. 新しいソフトウェアをインストールする前に echo を使用する理由

  3. UNIXのtimeコマンドの出力をbashの変数にリダイレクトしますか?