パイプや複合コマンドは `:` と `echo` とどのように機能しますか?

パイプや複合コマンドは `:` と `echo` とどのように機能しますか?
: [arguments] 

パラメータの拡張とリダイレクトの実行以外は何もしません。

パイプまたは複合コマンドはどのように機能しますか:

中かっこが問題を解決できないようです。

$ : { echo hello | cat; }
bash: syntax error near unexpected token `}'
    
$ : { if test 1; then echo hello; fi; }
bash: syntax error near unexpected token `then'

二重引用符は一部の拡張を防ぐため、これを:許可します。

echo代替を使用しても同じ問題が発生します:

$ echo { echo hello | cat; }
bash: syntax error near unexpected token `}'
$ echo { if test 1; then echo hello; fi; }
bash: syntax error near unexpected token `then'

デフォルトでは、拡張コマンドとリダイレクトコマンドを実行し、:それを使用して結果を確認したいと思いますecho。引用には、パイプと制御フローのキーワードが機能しないという言及がないので、エイリアス拡張が発生しないことを願っています。

ありがとうございます。

ベストアンサー1

: { echo hello | cat; }

シェルはコマンドラインを解析します。まず、最初のコマンドの終わりを見つけようとします。その先がパイプです。

だから最初のコマンドは

: { echo hello

何もしません。特に猫には何も送信しません。そして

: { echo hello | cat;

消えて左だけが残りますが、}これは有効なコマンドではありません。

おすすめ記事