如何在shell中比较十六进制数与十六进制数?

11

如何在shell中将十六进制数与十六进制数进行比较?


1
你的意思是什么?你想让“0xdead”等于“dEad”还是“57005”?需要更多的细节。 - William Pursell
1
并包括您已经尝试过的内容。祝你好运。 - shellter
实际上我是这样写的.... 如果测试 $1 -eq "00",其中 $1 是一个十六进制值。 - bd1257
3个回答

10

至少bash直接支持十六进制整数,只要它们以0x为前缀:

$ [[ 0xdead -lt 0xcafe ]] && echo yes || echo no
no
$ [[ 0xdead -gt 0xcafe ]] && echo yes || echo no
yes

你只需正常使用比较运算符即可...


嘿,我还有一个疑问:如何检查输入是数字还是字符串? - bd1257
@bd1257 虽然晚了6年,但是可以尝试使用case "$num" in ''|*[!a-fA-F0-9]*) echo "not hex";; *) echo "hex";; esac来测试十六进制数。 - Nick Bull

3
你可以使用 printf 将十六进制数转换为十进制数,然后比较数字值,例如:
x="0xdead"
y="0xcafe"

x_num=$(printf "%d" "$x")
y_num=$(printf "%d" "$y")

if [ $x_num -gt $y_num ]; then
    echo "x is my value"
else
   echo "x is not my value"
fi

在bash版本>=3.1的情况下,这也是可能的:printf -v x_num“%d”“$x” - Cyrus

1

怎么样?

(( "$answer" == 0x42 ))
echo $?

answer=0xDEADCAFE
(( "$answer" == 0xDEADCAFE ))
echo $?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接