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