如何在Shell脚本中使用二进制数字?

时间:2019-12-26 12:47:03

标签: shell

如何在Shell脚本中定义二进制数字? 我使用0b前缀进行了尝试,但是由于某些任意原因,该方法不起作用。 八进制和十六进制工作正常。

这是我要运行的代码:

#!/bin/sh
test=0b0010;
value=0b0001;

if [ $((value & test)) > 0 ]; then
        echo "true";
else
        echo "false";
fi

另外,我是Shell脚本的新手,是否有更好的或“适当的”方法来检查是否设置了位?

1 个答案:

答案 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