Bash中的位掩码

Bash中的位掩码,bash,shell,bit-manipulation,bitmask,Bash,Shell,Bit Manipulation,Bitmask,在shell脚本中是否可以执行类似以下代码的操作 var1=0xA (0b1010) if ( (var1 & 0x3) == 0x2 ){ ...perform action... } 为了让我的意图100%清楚,我想要的操作是检查0x3(0b0011)处的var1位,并确保它等于0x2(0b0010) 是的,这是完全可能的: #!/bin/bash var1=0xA # (0b1010) if (( (var1 & 0x3) == 0x2 )) then ec

在shell脚本中是否可以执行类似以下代码的操作

var1=0xA (0b1010)
if ( (var1 & 0x3) == 0x2 ){
    ...perform action...
}
为了让我的意图100%清楚,我想要的操作是检查0x3(0b0011)处的var1位,并确保它等于0x2(0b0010)


是的,这是完全可能的:

#!/bin/bash

var1=0xA # (0b1010)
if (( (var1 & 0x3) == 0x2 ))
then
  echo "Match"
fi

POSIX算术表达式中支持位操作:

if [ $(( var1 & 0x3 )) -eq $(( 0x2 )) ]; then
但是,在
bash
中使用算术语句要简单一些:

if (( (var1 & 0x3) == 0x2 )); then

通常,非完全琐碎的计算是通过外部命令执行的,例如
bc
dc
expr
。这是一个完全琐碎的计算。0x3==0x2在“simpler”命令中始终为false。需要大括号(var1和0x3)。谢谢;我忘记了(或没有考虑到)
&
的优先级低于
=
if (( (var1 & 0x3) == 0x2 )); then