Der gemeldete Fehler wird angezeigt, wenn die Variablen null (oder leer) sind:
$ unset var3 var4; var5=$(($var4-$var3))
bash: -: syntax error: operand expected (error token is "-")
Dies könnte passieren, weil der Wert für bc falsch war. Das könnte gut sein, dass bc UPPERcase-Werte benötigt. Es braucht BFCA3000
nicht bfca3000
. Das lässt sich leicht in Bash beheben, verwenden Sie einfach die ^^
Erweiterung:
var3=bfca3000; var3=`echo "ibase=16; ${var1^^}" | bc`
Dadurch wird das Skript folgendermaßen geändert:
#!/bin/bash
var1="bfca3000"
var2="efca3250"
var3="$(echo "ibase=16; ${var1^^}" | bc)"
var4="$(echo "ibase=16; ${var2^^}" | bc)"
var5="$(($var4-$var3))"
echo "Diference $var5"
Es ist jedoch nicht erforderlich, bc [1] zu verwenden, da bash die Übersetzung und Subtraktion direkt durchführen könnte:
#!/bin/bash
var1="bfca3000"
var2="efca3250"
var5="$(( 16#$var2 - 16#$var1 ))"
echo "Diference $var5"
[1] Hinweis: Ich gehe davon aus, dass die Werte in 64-Bit-Mathematik dargestellt werden können, da die Differenz in Ihrem ursprünglichen Skript in Bash berechnet wurde. Bash ist auf Ganzzahlen kleiner als ((2 ** 63) -1) beschränkt, wenn es in 64 Bit kompiliert wird. Dies ist der einzige Unterschied zu bc, für den es keine solche Grenze gibt.