这会打印你的外壳是什么?
echo foo | while read line; do echo $line; done < <(echo bar)
我希望它评估为echo foo | bar
or foo < <(bar)
,这两者都会导致错误消息。
在 Bash 4.1.5 中,管道似乎被简单地丢弃了:
bar
在破折号:
sh: Syntax error: redirection unexpected
这会打印你的外壳是什么?
echo foo | while read line; do echo $line; done < <(echo bar)
我希望它评估为echo foo | bar
or foo < <(bar)
,这两者都会导致错误消息。
在 Bash 4.1.5 中,管道似乎被简单地丢弃了:
bar
在破折号:
sh: Syntax error: redirection unexpected
Dash 不支持进程替换 ( <()
)。
如果您使用所比较的每个 shell 支持的语法,您看到的行为是一致的。试试这个:
echo hello | cat < inputfile
您应该看到“inputfile”的内容,而不是“hello”。在我尝试过的几个 shell 中,只有 Z shell 显示了两者。
这就是 POSIX 关于管道和重定向的说法:
command1 的标准输出应连接到 command2 的标准输入。在作为命令的一部分的重定向运算符指定的任何重定向之前,应将命令的标准输入、标准输出或两者都视为由管道分配(请参阅重定向)。
我将这解释为在上面的示例中,管道将 stdin 分配给cat
然后重定向覆盖它。