命令行:<<<代替<<


63

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

什么<<<意思

Answers:


45

<<<开始于“这里字符串”:该字符串膨胀并送到程序的标准输入。(在您的情况下,没有太多扩展发生。)等效于此:

echo ddd | md5sum

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

md5sum <<END
ddd
END

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


3
不等的是,除了中的例外rc<<<<<)使用一个临时文件,因此可以lseek由其标准输入的命令使用。
斯特凡Chazelas

32

<<<引入一个here字符串:after字符串<<<作为输入传递给命令。它起源于Byron Rakitzis的rc(Plan 9 shell)到Unix 的移植,也存在于zsh,ksh93和bash中。

<<引入了一个here文档:shell脚本的后几行作为输入传递给命令,并且after字符串<<是终止符。这里的文档适用于所有Bourne风格的外壳(Bourne,POSIX,ash,bash,ksh,zsh等),C风格的外壳(csh,tcsh)和Plan 9外壳(rc,es)。


3
不,<<<不是ksh扩展名,路径是rc-> zsh-> ksh93-> bashksh发行说明会在借用该功能时确认zsh)。<<也能在rc风格贝壳
斯特凡Chazelas

rc和之间有一个区别,zsh <<<尽管其中rc不包含尾随换行符,并且不使用临时文件(使用管道以及至少在通向Linux的端口中馈送它的额外过程)。
斯特凡Chazelas

更准确地说,它看起来像是<<<来自Unix端口,rc因为它看起来不像Plan9那样rc
斯特凡Chazelas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.