5

awkコマンドの出力を次のコマンドにパイプするサイトの例を見たばかりです。

(echo "this is a header";cat -)

これにより、出力の上部にヘッダー文字列が効果的に追加されます。-はそこにあるstdoutを表しているようです。しかし、この構成は何ですか?かっこで、それから猫-?これはどのように機能しますか、これは非常に便利なようですが、私がそれを見るのは初めてです。

4

2 に答える 2

8

-多くの場合stdin、ファイル名の引数を受け入れるコマンド ライン オプションを示すために使用できます。cat -is の効果はplain と同じであることに注意してください。catつまり、どちらのバージョンでも読み取りstdinます。

括弧により、シェルはサブシェルでコマンドを実行します(...)シェルbash -c '...'bash. xyz | echo "..."; catの出力でxyzパイプされechoて失われるため、これが行われます。

于 2012-08-23T14:49:04.190 に答える
4

ここでの括弧の使用は「グループ化構造」です。詳細については、bash リファレンス マニュアルを参照してください。

同様の構成では中括弧が使用されます。

{ echo "this is a header"; cat -; }

これは、中括弧と末尾のセミコロンの周りに空白を必要とする別の構文です。

中括弧と括弧の使用の違いは次のとおりです。中括弧内のコマンド リストは現在のシェルで実行され、括弧内のコマンド リストはサブシェルで実行されます。これは、コマンド リストで環境を変更する場合に重要です。サブシェルが終了すると、環境の変更は失われます。

于 2012-08-23T16:21:14.250 に答える