bash 与 bc 的幂次方

Power of a power in bash with bc

我要计算这个:

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^

我可以一次解决吗?

bc "power of" 运算符是 ^。您还必须引用所有内容以防止 shell 尝试执行诸如历史替换和路径名扩展或将括号解释为子地狱之类的事情:

$ 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