“此处字符串”(<<<
)是一种有用的构造,在许多情况下可以代替使用echo
。但是,在计算哈希值时(作为一个例子),添加换行符会改变哈希值。
我一直在寻找一种紧凑的方法来防止“此处字符串”添加换行符,但一无所获。这个问题已经在 SO 上提出并得到回答,但奇怪的是,据我所知,接受的答案(或任何答案)实际上并没有回答这个问题。
有些人可能会考虑用echo -n <string> | md5sum
或printf ... | md5sum
来代替来回答这个问题。但我的问题具体与“此处字符串”有关。
文档中明确指出会
<<<
添加换行符。但文档并未说明有办法阻止这种情况,因此不存在这种办法。因此,通过使用这种语法,然后要求它以不同的方式工作,您要求的行为与您引用的文档相反,并且不存在。真的,这是一个不合理的问题。
对此问题有两种可能的解决方案:
<<<
bash 中没有其他解决方案。
需要说明的是,
<<<
它首先被添加到 Byron Rakitzis 为rc
Unix 和zsh
¹ 开发的公共域克隆版本中。此后,它逐渐被添加到其他几个 shell 中。但有一个区别是在
zsh
中<<<
,添加了换行符,而在rc
中则没有。其他已添加的 Bourne 类 shell
<<<
如 ksh93(自m+
,2002 年起)、bash(自 2.05b 起,2002 年)、mksh(自 R33 起,2008 年)或 yash(自 2.7 起,2009 年)均复制了 zsh 的方式,而rc
类 shell 如es
或akanga
复制了 Byron 的rc
。rc
因此,如果可以选择切换到或衍生产品,那么您实际上可以这样做:如果目的是节省一些输入,您可以随时定义一个函数。
¹ 目前尚不清楚是谁最先想到的这个想法,
rc
1.0(1991-05-20)和zsh
2.0(1991-04-24)都有这个想法,而我能找到的每个版本的早期版本都没有;无论如何,当时的 usenet 档案显示,这两个 shell 的作者正在互相交谈。根据上面的 user10489,您不能仅使用此处的字符串来执行此操作。
尝试: