命令行:<<< 而不是 <<

Jea*_*lus 78 shell io-redirection

为什么命令md5sum <<< 'ddd' (输出:)是d6d88f2e50080b9602da53dac1102762 -正确的,而md5sum << 'ddd'不是正确的?

什么<<<意思?

chi*_*rlu 57

<<<启动“这里字符串”:该字符串膨胀并送到程序的标准输入。(在你的情况下,没有太多的扩展发生。)它相当于:

echo ddd | md5sum
Run Code Online (Sandbox Code Playgroud)

另一方面,<<启动一个 here 文档。以下所有行(直到包含标记的行)ddd将构成程序的输入。(您应该使用不太可能出现在您的数据中的标记。)您可以像这样实现与上面相同的效果:

md5sum <<END
ddd
END
Run Code Online (Sandbox Code Playgroud)

<<END和之间有一个区别<<'END':如果没有引号,here 文档中的任何变量、转义序列等都将照常展开。

  • 它不等价的地方是除了在 `rc` 中,`&lt;&lt;&lt;`(如 `&lt;&lt;`)使用一个临时文件,因此可以由 `lseek` 其标准输入的命令使用。 (4认同)
  • @AlexeiMartianov,它在打开后但在使用之前被删除,这确保了它不会被遗忘,因此它仅在文件系统上可见很短的时间。在 Linux 上, `ls -ld /proc/self/fd/0 &lt;&lt;&lt; text` 将显示其原始路径,并附加一个 `" (deleted)"`。如果未设置“$TMPDIR”,则通常位于“$TMPDIR”或“/tmp”中。`zsh` 使用 `$TMPPREFIX` 代替(前缀,而不是目录)。 (2认同)

Gil*_*il' 38

<<<引入一个here字符串:后面的字符串<<<作为输入传递给命令。这起源于 Byron Rakitzisrc为 Unix实现的(Plan 9 shell),也存在于 zsh、ksh93、mksh、yash 和 bash 中。

<<介绍一个here文档:shell脚本的后续行作为输入传递给命令,后面的字符串<<是终止符。此处的文档适用于所有 Bourne 风格的 shell(Bourne、POSIX、ash、bash、ksh、zsh 等)、C 风格的 shell(csh、tcsh)以及从 Plan 9 shell 派生的 shell(rc、es、akanga) .

  • 不,`&lt;&lt;&lt;` 不是`ksh` 扩展,路径是`rc` -&gt; `zsh` -&gt; `ksh93` -&gt; `bash`(`ksh` 发行说明承认一次从` zsh`)。`&lt;&lt;` 也适用于 `rc` 风格的 shell (4认同)