我很好奇以下比较的确切含义,尤其是与0x2&字符有关的内容以及它们的确切作用,

if [ $((${nValid} & 0x1)) -eq 1 ]; then
  #...snip...
fi

if [ $((${nValid} & 0x2)) -eq 2 ]; then
  #...snip...
fi

最佳答案

它正在逐位测试nValid。

按位AND运算符(&)表示逐位运算符将进行AND比较。因此,如果nValid是一个字节(8位)值,请查看二进制操作:

nValue & 0b00000001

如果nValue为42,则操作将如下所示
(nValue = 0b00101010) & 0b00000001 => 0b00000000 // (does not have the last bit set)
(nValue & 0b00000001) == 0b00000001 // false

对于第二个(nValid & 0x2)
(nValue = 0b00101010) & 0b00000010 => 0b00000010 // (has the 2nd-to-last bit set)
(nValue & 0b00000010) == 0b00000010 // true

这对于测试变量中的标志很有用。通常,您使用AND通过隔离位来检查标志,而使用OR组合标志。
0b00001000 | 0b00000010 | 0b00000001 => 0b00001011

07-26 09:29