建议我使用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/002和http://mywiki.wooledge.org/CommandSubstitution
过程替换:<(command)
or>(command)
被替换为FIFO
or/dev/fd/*
条目。基本上是设置命名管道的简写。看http://mywiki.wooledge.org/ProcessSubstitution例子:diff -u <(sort file1) <(sort file2)
command < <(othercommand)
othercommand | command
# 与但是相同没有子壳'命令'。使用文件重定向 (<) 重定向由进程替换 (<()) 创建的文件。 < 和 <(..) 之间的空格对于避免歧义很重要(它是定界文档,还是重定向的 PS?)。