我在使用bitwise&时遇到错误/ bin / sh中的运算符。我可以在bash中使用它,但是执行代码的脚本在常规shell中启动,因此我需要使它在普通的常规shell中工作。我需要简单地检查是否设置了某个位,例如第7位
以下代码在bash中工作,但不在/ bin / sh
中#!/bin/bash
y=93
if [ $((($y & 0x40) != 0)) ]; then
echo bit 7 is set
fi
我通过删除算术扩展
在/ bin / sh上面尝试过#!/bin/sh
y=93
val=`expr $y & 0x40`
if [ $val != 0 ]; then
echo worked 1
fi
有人可以建议在普通的常规shell中如何使用按位运算符吗?
答案 0 :(得分:2)
您可以使用除法和模运算来检查特定位:
if [ `expr \( $y / 64 \) % 2` -eq 1 ]; then
echo bit 6 is set
fi
答案 1 :(得分:1)
我认为问题在于您使用算术扩展返回的字符串,而不是退出代码。您可能应该在外面进行等于0
的测试,如
if [ "$((y & 0x40))" -ne 0 ]; then
否则$(((y & 0x40) != 0))
返回一个字符串,它将始终为非空,因此真值测试将始终通过。
答案 2 :(得分:0)
根据Alnitak的回答,我会这样做:
if expr \( $y / 128 \) % 2 > /dev/null; then
echo bit 7 is set
fi
它只是更简洁一点。
请注意:2 ^ 7 = 128