Я получаю ошибки при использовании побитовых & операторов в/bin/sh. Я могу заставить его работать в bash, но скрипт, который будет запускать код, запускается в обычной оболочке, поэтому мне нужно заставить его работать в обычной регулярной оболочке. Мне нужно просто проверить, установлен ли определенный бит, например. 7-й битПобитовые операторы поддерживаются в обычной оболочке/bin/sh (не bash)
После кода работы в Баш, но не в/бен/ш
#!/bin/bash
y=93
if [ $((($y & 0x40) != 0)) ]; then
echo bit 7 is set
fi
Я попытался выше в/бен/ш путем удаления arithmatic расширения
#!/bin/sh
y=93
val=`expr $y & 0x40`
if [ $val != 0 ]; then
echo worked 1
fi
Может кто-то подскажет, как побитовое оператор может использоваться в обычной регулярной оболочке?
'sh' не поддерживает операции сдвига бит. – Inian
NB: «бит 7» обычно считается MSB, например. с маской '0x80', с« бит 0 », являющейся LSB – Alnitak
'/bin/sh' может быть либо POSIX sh (стандарт начала 1990-х годов), либо оболочкой Bourne (реализация эпохи 1970-х годов). В частности, в Solaris, оба из них присутствовали в наше время (с прежним обычно в '/ usr/xpg/bin', если последний находится в'/bin'); '$ (())' существует только в первом. Вы знаете, что у вас есть? –