Bashマニュアルから
3.7.1 簡単なコマンド拡張
単純なコマンドを実行すると、シェルは左から右に次の拡張、割り当て、およびリダイレクトを実行します。
パーサによって変数割り当てとしてマークされた単語(コマンド名の前の単語)とリダイレクトは、後で処理するために保存されます。
変数の割り当てやリダイレクト以外の単語は拡張されます(21ページのセクション3.5「シェル拡張」を参照)。拡張後に残りの単語がある場合、最初の単語はコマンド名として扱われ、残りの単語は引数として扱われます。
リダイレクトは上記のように行われます(31ページのセクション3.6 [リダイレクト]を参照)。
各変数割り当てで「=」の後のテキストは、変数に割り当てられる前に、チルダ拡張、パラメータ拡張、コマンド置換、算術拡張、および引用符の削除が適用されます。
単純なコマンドのコマンド名、コマンド引数、および割り当て部分で発生する拡張について説明します。
リダイレクト部分も拡張されるのだろうか。それでは、いくつかの例を挙げることができますか?ありがとうございます。
答え1
はい、変数の値、またはコマンド置換の結果に/からリダイレクトする場合は、手順2で展開されます。
はい(ファイル名を作成file
):
outfile='file'
date >"$outfile"
しかし、あなたはこれを行うことはできません
redir='>'
date $redir file
これはdate
オペランドsum>
として呼び出されるためですfile
。これは、手順1でコマンドラインを解析するときに、「パーサーがリダイレクトのために表示した単語」がなかったためです。