bash 重定向子 shell 的命令 stdout,

bash 重定向子 shell 的命令 stdout,

建议我使用command < <(command)而不是command <<< $(command)没有进一步解释。它有效,但我不明白。有人可以详细说明一下吗?

在后者中,我认为括号中的 (command) 在子 shell 中执行命令。标准输出由 $() 捕获。最后 <<< 将其作为“此处文件”重定向到父 shell 中命令的标准输入。

相反,前一个构造将第一个文件的内容重定向<到父 shell 的标准输入。括号在子 shell 中执行(命令)。那么“<(command)”会将子shell的标准输出保存为文件,或者这是如何工作的?

答案1

<<<这里是一个字符串。与此处文档类似:​​后面的单词<<<和换行符被传递到命令的标准输入。语法:(command <<< "some sentence"与 类似echo "some sentence" | command,但没有子 shell 的开销)


命令替换:"$(cmd "foo bar")"导致命令“cmd”使用参数“foo bar”执行,并将"$(..)"被输出替换。看http://mywiki.wooledge.org/BashFAQ/002http://mywiki.wooledge.org/CommandSubstitution


过程替换:<(command)or>(command)被替换为FIFOor/dev/fd/*条目。基本上是设置命名管道的简写。看http://mywiki.wooledge.org/ProcessSubstitution例子:diff -u <(sort file1) <(sort file2)


command < <(othercommand)othercommand | command# 与但是相同没有子壳'命令'。使用文件重定向 (<) 重定向由进程替换 (<()) 创建的文件。 < 和 <(..) 之间的空格对于避免歧义很重要(它是定界文档,还是重定向的 PS?)。

相关内容