El error como se informa aparece cuando las variables son nulas (o vacías):
$ unset var3 var4; var5=$(($var4-$var3))
bash: -: syntax error: operand expected (error token is "-")
Eso podría suceder porque el valor dado a bc era incorrecto. Bien podría ser que bc necesita valores MAYÚSCULAS. Necesita BFCA3000
, no bfca3000
. Eso se arregla fácilmente en bash, solo usa la ^^
expansión:
var3=bfca3000; var3=`echo "ibase=16; ${var1^^}" | bc`
Eso cambiará el guión a esto:
#!/bin/bash
var1="bfca3000"
var2="efca3250"
var3="$(echo "ibase=16; ${var1^^}" | bc)"
var4="$(echo "ibase=16; ${var2^^}" | bc)"
var5="$(($var4-$var3))"
echo "Diference $var5"
Pero no hay necesidad de usar bc [1], ya que bash podría realizar la traducción y sustracción directamente:
#!/bin/bash
var1="bfca3000"
var2="efca3250"
var5="$(( 16#$var2 - 16#$var1 ))"
echo "Diference $var5"
[1] Nota: Supongo que los valores podrían representarse en matemáticas de 64 bits, ya que la diferencia se calculó en bash en su script original. Bash está limitado a enteros menores que ((2 ** 63) -1) si se compila en 64 bits. Esa será la única diferencia con bc que no tiene ese límite.