我需要使用 bash 命令添加 16 进制字母数字数据。这适用于数字
total=$(( 55 + 60 ))
但不是字母数字。是否有一个简单的 bash 命令用于添加字母数字数据?我正在添加像这样的大型字母数字数据:
436389bdc34dd718c7959db8d6df16967f2b9895e515da45fb09136183a7a9e2
+
1f0c45bbe9bc71a862f0d9672d056d2d741719a2b2d46ea6b269931d0b57674f
答案1
而bash
与所有 POSIX shell 一样,支持添加十六进制数字
printf '%x\n' "$((0xfff + 0xaaa))"
最多仅限于 64 位整数。
对于这么大的数字,您可以使用bc
:
{
echo obase=16
echo ibase=16
echo 436389bdc34dd718c7959db8d6df16967f2b9895e515da45fb09136183a7a9e2 +\
1f0c45bbe9bc71a862f0d9672d056d2d741719a2b2d46ea6b269931d0b57674f |
LC_ALL=C tr a-f A-F
} | BC_LINE_LENGTH=0 bc
BC_LINE_LENGTH=0
避免了 GNU 实现的换行bc
。对于其他实现,您可以使用管道来sed 'N;s/\\\n//'
代替。
或 GNU awk
(-M
如果使用任意精度算术支持构建):
$ gawk -M 'BEGIN{printf "%x\n", \
0x436389bdc34dd718c7959db8d6df16967f2b9895e515da45fb09136183a7a9e2 + \
0x1f0c45bbe9bc71a862f0d9672d056d2d741719a2b2d46ea6b269931d0b57674f}'
626fcf79ad0a48c12a86772003e483c3f342b23897ea48ecad72a67e8eff1131%