Rapor edilen hata, değişkenler boş (veya boş) olduğunda ortaya çıkar:
$ unset var3 var4; var5=$(($var4-$var3))
bash: -: syntax error: operand expected (error token is "-")
Bu, bc'ye verilen değerin yanlış olması nedeniyle olabilir. Bu, bc'nin BÜYÜK harf değerlerine ihtiyacı olabilir. İhtiyacı var BFCA3000
, değil bfca3000
. Bu, bash'ta kolayca sabitlenir, yalnızca ^^
genişletmeyi kullanın :
var3=bfca3000; var3=`echo "ibase=16; ${var1^^}" | bc`
Bu, senaryoyu şuna değiştirecek:
#!/bin/bash
var1="bfca3000"
var2="efca3250"
var3="$(echo "ibase=16; ${var1^^}" | bc)"
var4="$(echo "ibase=16; ${var2^^}" | bc)"
var5="$(($var4-$var3))"
echo "Diference $var5"
Ancak bash, çeviri ve çıkarmayı doğrudan gerçekleştirebileceği için bc [1] kullanmaya gerek yoktur:
#!/bin/bash
var1="bfca3000"
var2="efca3250"
var5="$(( 16#$var2 - 16#$var1 ))"
echo "Diference $var5"
[1] Not: Fark, orijinal betiğinizde bash ile hesaplandığından, değerlerin 64 bit matematik ile temsil edilebileceğini varsayıyorum. Bash, 64 bit olarak derlenmişse ((2 ** 63) -1) 'den küçük tamsayılarla sınırlıdır. Böyle bir limiti olmayan bc ile tek fark bu olacaktır.