bash vs sh脚本有不同的结果

时间:2017-08-24 06:31:36

标签: bash shell macos-sierra

当我在macOS上的终端中运行这些行时,我得到了正确的结果

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

6265747479

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

sh myscript.sh

62657474790a

就像它出于某种原因最终放回车。为什么?

2 个答案:

答案 0 :(得分:2)

echo的不同版本在将-n作为第一个参数时执行不同的操作。有些人将其作为输出的一部分打印出来,有些人将其解释为旗帜,谁知道会发生什么。根据{{​​3}},"如果第一个操作数是-n,或者如果任何操作数包含反斜杠字符,则结果是实现定义的。"

使用printf后,在没有换行符的情况下打印字符串的最可靠方法。它稍微复杂一点,因为你必须给它一个格式字符串以及你想要打印的字符串:

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

答案 1 :(得分: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