我注意到,当你要求echo
不在Emacs eshell中输出尾随换行符时,它仍会添加它。
例如,来自Bash:
$ echo -n "a" | sha1sum
86f7e437faa5a7fce15d1ddcb9eaeaea377667b8 -
来自Emacs' ESHELL:
$ echo -n "a" | sha1sum
3f786850e387550fdab836ed7e6dc881de23001b -
原因是添加了一个额外的字节:
来自Bash:
$ echo -n "a" | wc -c
1
来自eshell:
$ echo -n "a" | wc -c
2
使用hexdump,这是输出:
$ echo -n "a" | hexdump -C
00000000 61 0a |a.|
我对这一发现感到有些困惑:已经添加0a
("新行"的ASCII控制代码),它们不应该存在(传递给echo的" -n"选项应该不添加换行符。
需要什么样的elisp配置魔法让Emacs'在将echo的输出传递给其他命令之前eshell
没有添加换行符?
P.S:Debian Linux上的Emacs 24.3.50.1。
答案 0 :(得分:2)
eshell-echo
似乎颠倒了-n
的典型(sh / bash)含义,这可能是不幸的。 (仅供参考,如果您输入echo -h
,它会告诉您。)
此外,如果eshell-plain-echo-behavior
为非nil
,则会强制换行到参数的末尾。
所以你想要那个变量nil,并且你想使用没有echo
参数的-n
。