Как я могу получить преобразование Hex в ш - PullRequest
0 голосов
/ 29 октября 2018

Я хочу сделать скрипт / bin / sh совместимым. В какой-то момент я использовал распечатку шестнадцатеричной переменной до ее десятичного значения, но она выдает эту ошибку:

sh: 1: arithmetic expression: expecting EOF: "16#c0"

Эта ошибка отсутствует, когда скрипт выполняется / bin / bash. Я свел его к следующей проблеме:

$ sh -c 'echo $((16#c0))'     
sh: 1: arithmetic expression: expecting EOF: "16#c0"

$ sh -c "echo $((16#c0))"    
192

Почему это так и как я могу заставить эхо работать в моем скрипте?

EDIT: subshell перенаправляется в / bin / dash

$ readlink -f $(which sh)
/bin/dash
$ type sh
sh is /bin/sh

1 Ответ

0 голосов
/ 29 октября 2018

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...