当变量为空(或空)时,会出现报告的错误:
$ unset var3 var4; var5=$(($var4-$var3))
bash: -: syntax error: operand expected (error token is "-")
这可能是因为给 bc 的值不正确。那很可能是 bc 需要大写值。它需要BFCA3000
,不是bfca3000
。这在 bash 中很容易修复,只需使用^^
扩展:
var3=bfca3000; var3=`echo "ibase=16; ${var1^^}" | bc`
这会将脚本更改为:
#!/bin/bash
var1="bfca3000"
var2="efca3250"
var3="$(echo "ibase=16; ${var1^^}" | bc)"
var4="$(echo "ibase=16; ${var2^^}" | bc)"
var5="$(($var4-$var3))"
echo "Diference $var5"
但是不需要使用 bc [1],因为 bash 可以直接执行翻译和减法:
#!/bin/bash
var1="bfca3000"
var2="efca3250"
var5="$(( 16#$var2 - 16#$var1 ))"
echo "Diference $var5"
[1]注意:我假设这些值可以用 64 位数学表示,因为差异是在原始脚本中以 bash 计算的。如果以 64 位编译,则 Bash 仅限于小于 ((2**63)-1) 的整数。这将是与没有此类限制的 bc 的唯一区别。