Kesalahan seperti yang dilaporkan muncul ketika variabelnya nol (atau kosong):
$ unset var3 var4; var5=$(($var4-$var3))
bash: -: syntax error: operand expected (error token is "-")
Itu bisa terjadi karena nilai yang diberikan kepada bc salah. Mungkin saja bc membutuhkan nilai-nilai UPPERcase. Itu perlu BFCA3000
, bukan bfca3000
. Itu mudah diperbaiki di bash, cukup gunakan ^^
ekspansi:
var3=bfca3000; var3=`echo "ibase=16; ${var1^^}" | bc`
Itu akan mengubah skrip menjadi ini:
#!/bin/bash
var1="bfca3000"
var2="efca3250"
var3="$(echo "ibase=16; ${var1^^}" | bc)"
var4="$(echo "ibase=16; ${var2^^}" | bc)"
var5="$(($var4-$var3))"
echo "Diference $var5"
Tetapi tidak perlu menggunakan bc [1], karena bash dapat melakukan terjemahan dan substraksi secara langsung:
#!/bin/bash
var1="bfca3000"
var2="efca3250"
var5="$(( 16#$var2 - 16#$var1 ))"
echo "Diference $var5"
[1] Catatan: Saya mengasumsikan nilainya dapat direpresentasikan dalam matematika 64 bit, karena perbedaannya dihitung dalam bash dalam skrip asli Anda. Bash terbatas pada bilangan bulat kurang dari ((2 ** 63) -1) jika dikompilasi dalam 64 bit. Itu akan menjadi satu-satunya perbedaan dengan bc yang tidak memiliki batas seperti itu.