質問

これはあなたのシェルを何に印刷しますか?

echo foo | while read line; do echo $line; done < <(echo bar)

私はそれが評価することを期待します echo foo | bar また foo < <(bar), 、どちらもエラーメッセージになります。

Bash 4.1.5では、パイプが単に破棄されているように見えます。

bar

ダッシュ中:

sh: Syntax error: redirection unexpected
役に立ちましたか?

解決

Dashはプロセス代替をサポートしていません(<()).

あなたが見ている動作は、あなたが比較している各シェルによってサポートされている構文を使用する場合、一貫しています。これを試して:

echo hello | cat < inputfile

「hello」ではなく「入力ファイル」の内容が表示されるはずです。私が試したいくつかのシェルのうち、zシェルだけが両方を示しました。

これは、Posixがパイプラインとリダイレクトに関して言っていることです。

command1の標準出力は、command2の標準入力に接続するものとします。コマンドの標準入力、標準出力、または両方は、コマンドの一部であるリダイレクト演算子によって指定されたリダイレクトの前に、パイプラインによって割り当てられていると見なされます(リダイレクトを参照)。

私はこれを上記の例の場合、パイプラインがstdinをに割り当てることを意味すると解釈します cat その後、リダイレクトはそれを無効にします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top