我很好奇使用多个"<"满足某些bash重定向的字符。什么时候&lt ;,<<<<<<<<<<<<<<在什么条件下?不应该只是一个"<"是否足以正确编写命令,功能或子程序?在unix'一切'是一个文件。那么为什么要用流程替换来掩盖它呢?那不仅仅是任何shell的自然(分组)功能的掩码吗?或者在某些情况下只是正确的执行顺序问题?
效率和性能总是需要权衡,易读/写能力或易用性也是如此。我是一只试图学习新技巧的老狗。我理解的10行代码,与我不理解的一行代码执行相同的任务,值得我权衡。在我多年的脚本编写中,我几乎没有需要写入非易失性存储的情况,除非它打算永久地留在那里""永久。
我没有看到输出的这种参考。单个">"将创建/覆盖文件。双">>"将创建/附加文件。是否有">>>"输出呢?这是一个多余的问题。我只对输入重定向感兴趣。
答案 0 :(得分:2)
简单来说,它们都有不同的含义。
<
重定向输入<<
此处文件<<<
此处字符串(此处文档的变体)<
重定向输入grep foo < a-file.txt
这会将a-file.txt
的内容重定向到grep
的标准输入。 grep
会搜索字符串&#39; foo&#39;的出现次数。在文件a-file.txt
中。
<<
此处文件grep foo <<EOF
foo
foobar
baz
bar
EOF
在EOF
之后和最后一行注意<<
。来自man bash
:
这种类型的重定向指示shell从当前源读取输入,直到看到只包含分隔符(没有尾随空格)的行。
如此有效,grep
将两个EOF
包围的字符串作为输入。
<<<
Here String(此处文档的变体)grep foo <<<"foobar"
您可以将此视为&#34;单行&#34;这里是文件(<<
)。 grep
获取字符串&#34; foobar&#34;作为输入。
不应该是一个&#34;&lt;&#34;是否足以正确编写命令,功能或子程序?
那么,在您的用例中使用依赖的哪个变体是正确的,并且与您使用的命令无关,作为您的shell(很可能是bash
)会照顾他们。
我建议使用bash
手册的 3.6重定向部分进一步阅读。有关<
,<<
和<<<
的部分为3.6.1
,3.6.6
,3.6.7
:https://www.gnu.org/software/bash/manual/bash.html#Redirections