報告されたエラーは、変数がnull(または空)の場合に表示されます。
$ 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"
ただし、bashは変換と減算を直接実行できるため、bc[1]を使用する必要はありません。
#!/bin/bash
var1="bfca3000"
var2="efca3250"
var5="$(( 16#$var2 - 16#$var1 ))"
echo "Diference $var5"
[1]注:差は元のスクリプトのbashで計算されたため、値は64ビットの数学で表すことができると想定しています。64ビットでコンパイルされた場合、Bashは((2 ** 63)-1)未満の整数に制限されます。それはそのような制限がないbcとの唯一の違いになります。