L'erreur signalée apparaît lorsque les variables sont nulles (ou vides) :
$ unset var3 var4; var5=$(($var4-$var3))
bash: -: syntax error: operand expected (error token is "-")
Cela pourrait arriver parce que la valeur donnée à bc était incorrecte. Cela pourrait être dû au fait que bc a besoin de valeurs en majuscules. Il a besoin de BFCA3000
pas bfca3000
. Cela est facilement corrigé dans bash, il suffit d'utiliser l'option ^^
l'expansion :
var3=bfca3000; var3=`echo "ibase=16; ${var1^^}" | bc`
Cela changera le script en ceci :
#!/bin/bash
var1="bfca3000"
var2="efca3250"
var3="$(echo "ibase=16; ${var1^^}" | bc)"
var4="$(echo "ibase=16; ${var2^^}" | bc)"
var5="$(($var4-$var3))"
echo "Diference $var5"
Mais il n'est pas nécessaire d'utiliser bc [1], car bash peut effectuer la traduction et la soustraction directement :
#!/bin/bash
var1="bfca3000"
var2="efca3250"
var5="$(( 16#$var2 - 16#$var1 ))"
echo "Diference $var5"
[1] Note : Je suppose que les valeurs pourraient être représentées en maths 64 bits, car la différence a été calculée en bash dans votre script original. Bash est limité aux entiers inférieurs à ((2**63)-1) s'il est compilé en 64 bits. Ce sera la seule différence avec bc qui n'a pas une telle limite.