对此处的操作不太确定,但当我转到http://codebeautify.org/string-hex-converter并输入1yS9$dNc
时,我会看到输出:3179533924644e63
。
在bash我做:
printf "1yS9$dNc" | xxd
0000000: 3179 5339 1yS9
从手册页中,我得到 xxd创建给定文件或标准输入的十六进制转储。
我的问题:
1yS9$dNc
转到3179533924644e63
)。答案 0 :(得分:2)
您需要使用单个引号。比较:
$ printf "1yS9$dNc" | xxd
0000000: 3179 5339 1yS9
使用:
$ printf '1yS9$dNc' | xxd
0000000: 3179 5339 2464 4e63 1yS9$dNc
您的xxd
输出很短的原因是shell将$dNc
的值扩展为空字符串。因此,xxd
看到的唯一字符是1yS9
。相反,如果使用单引号,则shell不会扩展任何内容。
在双引号内,shell执行(1)变量扩展,(2)命令替换,(3)算术扩展。如果你想要那些,请使用双引号,如果你不使用单引号。
要使输出看起来更像codebeautify,请使用-g 0
:
$ printf '1yS9$dNc' | xxd -g 0
0000000: 3179533924644e63 1yS9$dNc
或者,更好的是,使用-plain
:
$ printf '1yS9$dNc' | xxd -plain
3179533924644e63
如果目标是将十六进制值转换为shell变量,那么使用bash:
$ printf -v var "%s" $(xxd -p <<<'1yS9$dNc')
$ echo $var
3179533924644e630a
帽子提示:David C. Rankin