O erro conforme relatado aparece quando as variáveis são nulas (ou vazias):
$ unset var3 var4; var5=$(($var4-$var3))
bash: -: syntax error: operand expected (error token is "-")
Isso poderia acontecer porque o valor dado a bc estava incorreto. Pode ser que o bc precise de valores UPPERcase. Precisa BFCA3000
, não bfca3000
. Isso é facilmente corrigido no bash, basta usar a ^^
expansão:
var3=bfca3000; var3=`echo "ibase=16; ${var1^^}" | bc`
Isso mudará o script para isso:
#!/bin/bash
var1="bfca3000"
var2="efca3250"
var3="$(echo "ibase=16; ${var1^^}" | bc)"
var4="$(echo "ibase=16; ${var2^^}" | bc)"
var5="$(($var4-$var3))"
echo "Diference $var5"
Mas não há necessidade de usar bc [1], pois o bash poderia executar a tradução e a subação diretamente:
#!/bin/bash
var1="bfca3000"
var2="efca3250"
var5="$(( 16#$var2 - 16#$var1 ))"
echo "Diference $var5"
[1] Nota: Estou assumindo que os valores possam ser representados na matemática de 64 bits, pois a diferença foi calculada no bash no seu script original. Bash é limitado a números inteiros menores que ((2 ** 63) -1) se compilados em 64 bits. Essa será a única diferença com bc que não possui esse limite.