Сила власти в Баш с BC - PullRequest
       16

Сила власти в Баш с BC

0 голосов
/ 09 января 2019

Я хочу рассчитать это:

0x0404cb * 2**(8*(0x1b - 3))

в десятичном виде:

263371*2^^(8*(27-3))

с использованием | bc.

Я пытался с

echo 263371*2^^(8*(27-3)) | bc
expr 263371*2^^(8*(27-3)) | bc
zsh: no matches found: 263371*2^^(8*(27-3))

или попробуйте решить эту проблему

238348 * 2^176^

Можно ли разрешить за один снимок?

1 Ответ

0 голосов
/ 09 января 2019

Оператор bc "сила" равен ^. Вы также должны заключить все в кавычки, чтобы оболочка не пыталась выполнять такие вещи, как подстановка истории и расширение имени пути, или интерпретировать скобки как подоболочки:

$ bc <<< '263371*2^(8*(27-3))'
1653206561150525499452195696179626311675293455763937233695932416

Если вы хотите обработать исходное выражение с нуля, вы можете использовать специальную переменную ibase, чтобы установить ввод в шестнадцатеричное значение и выполнить дополнительную обработку:

eqn='0x0404cb * 2**(8*(0x1b - 3))'

# Replace "**" with "^"
eqn=${eqn//\*\*/^}

# Remove all "0x" prefixes
eqn=${eqn//0x}

# Set ibase to 16 and uppercase the equation
bc <<< "ibase = 16; ${eqn^^}"

или вместо расширения параметров более компактный и менее читаемый с помощью (GNU) sed:

sed 's/\*\*/^/g;s/0x//g;s/.*/\U&/;s/^/ibase = 16; /' <<< "$eqn" | bc
...