Bash 如何在shell中比较十六进制数和十六进制数?
如何在shell中比较十六进制数和十六进制数 怎么样Bash 如何在shell中比较十六进制数和十六进制数?,bash,shell,Bash,Shell,如何在shell中比较十六进制数和十六进制数 怎么样 (( "$answer" == 0x42 )) echo $? answer=0xDEADCAFE (( "$answer" == 0xDEADCAFE )) echo $? 至少bash直接支持十六进制整数,前提是它们的前缀是0x: $ [[ 0xdead -lt 0xcafe ]] && echo yes || echo no no $ [[ 0xdead -gt 0xcafe ]] && echo y
(( "$answer" == 0x42 ))
echo $?
answer=0xDEADCAFE
(( "$answer" == 0xDEADCAFE ))
echo $?
至少
bash
直接支持十六进制整数,前提是它们的前缀是0x
:
$ [[ 0xdead -lt 0xcafe ]] && echo yes || echo no
no
$ [[ 0xdead -gt 0xcafe ]] && echo yes || echo no
yes
您只需正常使用比较运算符…您可以使用
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
什么意思?是否希望“0xdead”等于“dEad”或“57005”?还需要更多的细节,包括你迄今为止所做的尝试。祝你好运。实际上我是这样写的。。。。如果测试$1-eq“00”,其中$1是十六进制值。嘿,我还有一个疑问:如何检查输入是数字还是字符串?@bd1257晚了6年,但请尝试在“|*[!a-fA-F0-9]*)中使用
大小写“$num”;*)回显“不是十六进制”;*)回声“十六进制”;;esac
测试十六进制数。对于bash版本>=3.1,这也是可能的:printf-v x_num“%d”“$x”