Сравнение строк оператора If

На хинду этот пакет является отдельным и назван media-plugins/gst-plugins-x264

3
31.07.2015, 07:47
3 ответа

POSIXly вы можете получить десятичное значение шестнадцатеричного числа типа:

hex=10
echo "$((0x$hex))"

16

И вам действительно не нужно делать все эти [ тесты ]. Я думаю, что должно сработать:

case $f7 in
(EnHr|EnSt|SpJb|Chem|[BT]rTm|PmTm|HyTm)
    printf "\t\t\t\t\t%s%b"       \
       "HEX VALUE is" ":\t$f10"   \
       '' "inside case loop.\t\t" \
       Sen ":\t$f7"               \
       Val ":\t$((!(inside+=1)|0x$f10))"
esac
4
27.01.2020, 21:19

Стандарт по ошибке исходит из bc. Он ожидает шестнадцатеричные значения в верхнем регистре. Поэтому вместо 0019c4ef нужно передать его 0019C4EF.

Преобразование шестнадцатеричного числа в десятичное можно сделать, используя без bc - смотрите этот ответ https://stackoverflow.com/a/13280173/3935925

0
27.01.2020, 21:19

По обоим вопросам ошибка пришла из bc.

0019c4ef является недействительным шестнадцатеричным номером в bc, для действительного шестнадцатеричного номера нужен 0019C4EF:

echo "ibase=16; 0019C4EF" | bc
1688815

Поскольку вы использовали bash (также работает в ksh, zsh, mksh, pdksh, posh), можно использовать [основание#]n, где основание - десятичное число от 2 до 64:

$ echo "$((16#0019c4ef))"
1688815

В вашем случае просто удалите строку назначения, используя bc, и отредактируйте следующую строку:

echo -e "\t\t\t\t\tinside the if loop\tSen: $f7\tVal: " "$((16#$f10))"
0
27.01.2020, 21:19

Теги

Похожие вопросы