単純なコマンドのリダイレクトされた部分で拡張が発生しますか?

単純なコマンドのリダイレクトされた部分で拡張が発生しますか?

Bashマニュアルから

3.7.1 簡単なコマンド拡張

単純なコマンドを実行すると、シェルは左から右に次の拡張、割り当て、およびリダイレクトを実行します。

  1. パーサによって変数割り当てとしてマークされた単語(コマンド名の前の単語)とリダイレクトは、後で処理するために保存されます。

  2. 変数の割り当てやリダイレクト以外の単語は拡張されます(21ページのセクション3.5「シェル拡張」を参照)。拡張後に残りの単語がある場合、最初の単語はコマンド名として扱われ、残りの単語は引数として扱われます。

  3. リダイレクトは上記のように行われます(31ページのセクション3.6 [リダイレクト]を参照)。

  4. 各変数割り当てで「=」の後のテキストは、変数に割り当てられる前に、チルダ拡張、パラメータ拡張、コマンド置換、算術拡張、および引用符の削除が適用されます。

単純なコマンドのコマンド名、コマンド引数、および割り当て部分で発生する拡張について説明します。

リダイレクト部分も拡張されるのだろうか。それでは、いくつかの例を挙げることができますか?ありがとうございます。

答え1

はい、変数の値、またはコマンド置換の結果に/からリダイレクトする場合は、手順2で展開されます。

はい(ファイル名を作成file):

outfile='file'
date >"$outfile"

しかし、あなたはこれを行うことはできません

redir='>'
date $redir file

これはdateオペランドsum>として呼び出されるためですfile。これは、手順1でコマンドラインを解析するときに、「パーサーがリダイレクトのために表示した単語」がなかったためです。

関連情報