这会打印你的外壳吗?
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
答案 0 :(得分:3)
Dash不支持进程替换(<()
)。
如果使用您要比较的每个shell支持的语法,那么您所看到的行为是一致的。试试这个:
echo hello | cat < inputfile
您应该看到“inputfile”的内容而不是“hello”。在我试过的几个炮弹中,只有Z炮弹出现了。
这就是POSIX关于管道和重定向的说法:
command1的标准输出应连接到command2的标准输入。在作为命令一部分的重定向运算符指定的任何重定向之前,应认为标准输入,标准输出或命令两者都由管道分配。(参见重定向)。
我将此解释为意味着在上面的示例中,管道将stdin分配给cat
,然后重定向会覆盖它。