3

这会打印你的外壳是什么?

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

我希望它评估为echo foo | baror foo < <(bar),这两者都会导致错误消息。

在 Bash 4.1.5 中,管道似乎被简单地丢弃了:

bar

在破折号:

sh: Syntax error: redirection unexpected
4

1 回答 1

3

Dash 不支持进程替换 ( <())。

如果您使用所比较的每个 shell 支持的语法,您看到的行为是一致的。试试这个:

echo hello | cat < inputfile

您应该看到“inputfile”的内容,而不是“hello”。在我尝试过的几个 shell 中,只有 Z shell 显示了两者。

这就是 POSIX 关于管道和重定向的说法:

command1 的标准输出应连接到 command2 的标准输入。在作为命令的一部分的重定向运算符指定的任何重定向之前,应将命令的标准输入、标准输出或两者都视为由管道分配(请参阅重定向)。

我将这解释为在上面的示例中,管道将 stdin 分配给cat然后重定向覆盖它。

于 2011-01-07T16:54:22.833 回答