当我在macOS上的终端中运行这些行时,我得到了正确的结果
hex=$(echo -n 'betty' | xxd -p)
echo $hex
6265747479
但是当我在bash脚本中运行它时,我会得到完全不同的东西
sh myscript.sh
62657474790a
就像它出于某种原因最终放回车。为什么?
答案 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