2017-08-24 55 views
1

当我在Mac OS运行在我的终端,这些行我得到正确的结果庆典VS sh脚本不同的结果

hex=$(echo -n 'betty' | xxd -p) 
echo $hex 

6265747479 

,但是当我在bash脚本运行它们,我得到完全不同的东西

sh myscript.sh 

62657474790a 

这就像它由于某种原因将回车放在最后。为什么?

+0

无法重现。请添加'cat myscript.sh的输出; sh myscript.sh' – Leon

+0

@Peter:首先,它不是*回车*,它是*换行*。其次,似乎涉及不同的炮弹。在你的第二个例子中,你提供'sh'作为shell,并且我们不知道sh在你的机器上连接到哪里。如果两者都是bash shell,它们可能是不同的版本(在两种版本中都做一个'print $ BASH_VERSION'),它们以不同的方式实现'echo'。 – user1934428

+0

我很惊讶'echo -n'betty''会产生输出,这个输出看起来是'betty'后跟一个换行符。我希望不带换行符的'betty',或换行符的'-n betty'。与'echo -n betty'相比,'sh -c'echo -n betty'' print究竟是什么? 'ls -l/bin/sh'说什么? –

回答

2

不同版本的echo做不同的事情给出-n作为他们的第一个参数的时候。有些人将其作为他们输出的一部分进行打印,有些人将其解读为旗帜,谁知道会发生什么。根据POSIX standard for echo,“如果第一个操作数是-n,或者任何操作数包含反斜杠字符,则结果是实现定义的。”

printf之后打印没有换行的字符串的最可靠的方法。它稍微复杂一点,因为您必须给它一个格式字符串以及要打印的字符串:

hex=$(printf "%s" 'betty' | xxd -p) 
+0

我明白了,即使它们是相同的命令,运行时(sic)也可以用不同的方式处理它们。 – Peter

1

尝试bash而不是sh。由于echo内置的命令,它依赖于shell如何执行。对我来说,从SH回声似乎并不支持-n

sh-3.2$ echo -n hello 
-n hello 
sh-3.2$ echo $(echo -n 'betty' | xxd -p) 
2d6e2062657474790a