如图所示,echowithout -n, here strings , here documents , and printfwith\n产生一个换行符,printfwithout\n和echowith-n将其关闭。请注意,如果您的字符串不包含任何%或\字符(printf在其第一个参数中特别对待),您甚至可以编写:
请注意,根据您必须实际将字符串输入终端的警告,此方法是完全通用的。您的字符串中可以包含其他换行符。例如,您可以键入md5sum, then Enter, then hello, then Enter, then world, then Ctrl+D两次,结果与 相同printf 'hello\nworld' | md5sum。
如果您不想散列尾随换行符,请使用:
大多数情况下,计算文件全部内容的哈希值,例如 MD5 和。您可以计算任何字符串的哈希值,但有一个转折点:许多生成字符串的方法都附加一个尾随换行符。
因此,使用换行符:
没有换行符:
在所有这些方法中,您可以
md5sum
通过>outfile
在其旁边写入outfile
而不是终端来重定向输出。根据您的目标,其中任何一个都可能是合理的。但是,如果您的目标是计算Hello, World!
(或您的字符串是什么)的 MD5 哈希,而不是Hello, World!
附加换行符,那么您不得使用任何附加换行符的方法。如图所示,
echo
without-n
, here strings , here documents , andprintf
with\n
产生一个换行符,printf
without\n
和echo
with-n
将其关闭。请注意,如果您的字符串不包含任何%
或\
字符(printf
在其第一个参数中特别对待),您甚至可以编写:请注意,这
printf
通常比echo
.最后,对于交互式使用,还有另一种方法:
md5sum
(或重定向到)。md5sum >outfile
outfile
md5sum
md5sum
这在实践中比我说的更简单、更快。它之所以有效,是因为终端特别对待Ctrl+ D。(在极少数情况下,您想将该字符作为字符串的一部分直接发送,您可以按Ctrl+ ,V然后立即按Ctrl+ D。)
如果您的字符串以换行符结尾,则跳过第 3 步,因为缓冲区已被刷新。也就是说,如果您按下的最后一个键是Enter(或者如果您粘贴了文本并且该文本以换行符结尾,那么您位于行首)只需按一次Ctrl+D而不是两次。
请注意,根据您必须实际将字符串输入终端的警告,此方法是完全通用的。您的字符串中可以包含其他换行符。例如,您可以键入
md5sum
, then Enter, thenhello
, then Enter, thenworld
, then Ctrl+D两次,结果与 相同printf 'hello\nworld' | md5sum
。回显文本并通过管道传输到 md5sum。将输出重定向到文件:
编辑:正如@EliahKagan 所指出的,这包括一个尾随换行符。请参阅他的出色答案以获得更好的解决方案。