为什么这个简单的shell代码将输出显示为“ / dev / fd / 11”?

时间:2019-02-10 19:56:25

标签: shell unix

我正在尝试在Mac zsh shell中进行一些重定向。

我看到echo <(echo $c)输出/dev/fd/11。我不知道为什么会这样。有人可以解释吗?

注意:$c是否初始化无关紧要。 echo < ''返回zsh: no such file or directory:,所以我不知所措。

2 个答案:

答案 0 :(得分:2)

进程扩展有效地“扩展”为文件名。您正在将该文件名作为参数传递给echo,它会忠实地写回到标准输出。如果你写过

cat <(echo $c)

正如我想的那样,您将获得命令echo $c的输出,因为cat将打开/dev/fd/11进行读取并输出其内容。

答案 1 :(得分:0)

从这里得到答案 https://unix.stackexchange.com/questions/17107/process-substitution-and-pipe

看起来像<(COMMAND)<(STDIN重定向)命令稍有不同

  

管道和输入重定向将内容推送到STDIN流上。处理   替换运行命令,将其输出保存到特殊的   临时文件,然后传递该文件名代替命令。   无论您使用什么命令,都将其视为文件名。请注意   创建的文件不是常规文件,而是已删除的命名管道   不再需要时自动