双重重定向测试

时间:2011-01-07 14:26:56

标签: bash shell redirect dash-shell

这会打印你的外壳吗?

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

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

在Bash 4.1.5中,看起来管道被简单地丢弃了:

bar

在短跑中:

sh: Syntax error: redirection unexpected

1 个答案:

答案 0 :(得分:3)

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

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

echo hello | cat < inputfile

您应该看到“inputfile”的内容而不是“hello”。在我试过的几个炮弹中,只有Z炮弹出现了。

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

  

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

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