我正在尝试了解 here-docs 和 here-strings。我想了解为什么输出echo <<< more than one word
省略了第一个单词。例如
> echo <<< more than one word
than one word
> echo <<< a b c
b c
>echo <<< "more than one word"
-- <blank line> --
以下情况则不会发生相同的行为cat
:
>cat <<< "more than one word"
more than one word
我研究过:
维基百科这里的文件文章。坦率地说,我发现许多维基百科文章深奥难懂,包括著名的文章;而且它们的例子并没有解决这个特定问题。
我的发行版:
>cat /proc/version
Linux version 3.11.10-301.fc20.x86_64 ([email protected]) (gcc version 4.8.2 20131017 (Red Hat 4.8.2-1) (GCC) ) #1 SMP Thu Dec 5 14:01:17 UTC 2013
我也没有在超级用户上找到关于这个特定主题的现有问题。
答案1
<<<
将左侧命令传递stdin
给右侧对应方。
这对于命令有意义cat
,当没有给出文件名作为参数时,它会打印它。但这对于总是忽略它并只打印其参数的命令stdin
没有意义。echo
stdin
答案2
我读了另一个答案几次,我还是不清楚,直到我意识到只能<<<
看到a
右侧并将其发送给命令stdin
。这意味着
echo <<< a b c
相当于
echo b c <<< a
甚至
<<< a echo b c
即,即使b
和在之后,它们也是c
的参数(比较、、的等价性)。echo
<<< a
cat -n < foo.txt
cat < foo.txt -n
< foo.txt cat -n
现在声明
echo
[…] 总是忽略它stdin
并只打印它的参数
满足了解释。
答案3
您在“<<<”后输入的字符串是文本分隔符。您使用了三个“<”,而不是两个,这可能会导致您注意到的有趣行为。如果您使用命令 cat 而不是 echo,行为将更符合您的预期。
基本上,单词“more”和“a”被用作标志来识别多行字符串何时结束。