Jens Petersen
Jens Petersen

Reputation: 308

Bit mask in Bash

Is something like the following code possible within a shell script?

var1=0xA (0b1010)
if ( (var1 & 0x3) == 0x2 ){
    ...perform action...
}

Just to make my intentions 100% clear my desired action would be to check bits of var1 at 0x3 (0b0011) and make sure that it equals 0x2 (0b0010)

 0b1010
&0b0011
_______
 0b0010 == 0x2 (0b0010)

Upvotes: 12

Views: 8369

Answers (2)

chepner
chepner

Reputation: 532053

Bit manipulation is supported in POSIX arithmetic expressions:

if [ $(( var1 & 0x3 )) -eq $(( 0x2 )) ]; then

However, it's a bit simpler use an arithmetic statement in bash:

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

Upvotes: 7

that other guy
that other guy

Reputation: 123600

Yes, this is entirely possible:

#!/bin/bash

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

Upvotes: 4

Related Questions