如何在Shell脚本中定义二进制数字?
我使用0b
前缀进行了尝试,但是由于某些任意原因,该方法不起作用。
八进制和十六进制工作正常。
这是我要运行的代码:
#!/bin/sh
test=0b0010;
value=0b0001;
if [ $((value & test)) > 0 ]; then
echo "true";
else
echo "false";
fi
另外,我是Shell脚本的新手,是否有更好的或“适当的”方法来检查是否设置了位?
答案 0 :(得分:3)
我认为没有POSIX shell语法可以以非十进制定义数字(除非您使用bc
之类的外部程序为您进行转换)
b2d()( echo "ibase=2; $1" | bc )
test=$(b2d 0010)
value=$(b2d 0001)
但是,如果您使用的是bash
,则可以使用let
或((
... ))
:
let "test = 2#0010 "
let "value=2#0001"
((test = 2#0010))
((value=2#0001 ))
test=$(( 2#0010))
value=$((2#0001))
此后,您可以像在问题中一样进行检查,或简化为:
if (( value & test )); then
echo true
else
echo false
fi