sh
(часто симлинк на POSIX-оболочку, например dash
) не поддерживает арифметическую оценку в виде [base#]n
, как bash
поддерживает.
Поэтому вам нужно использовать префикс 0x
с шестнадцатеричным числом:
sh -c 'echo $((0xc0))'
или
sh -c 'printf "%d\n" 0xc0'
Обратите внимание, что вам всегда нужно использовать одинарные кавычки, чтобы текущая оболочка не интерпретировала содержимое строки в двойных кавычках.
Итак, ваша попытка с
sh -c "echo $((16#c0))"
похоже, что работает только потому, что $((16#c0))
интерпретируется bash
, а фактическая команда, выполненная sh
, равна echo 192
.