3

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

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
4

1 に答える 1

3

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

比較している各シェルでサポートされている構文を使用すると、表示される動作は一貫しています。これを試して:

echo hello | cat < inputfile

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

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

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

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

于 2011-01-07T16:54:22.833 に答える