ข้อผิดพลาดตามที่รายงานจะปรากฏขึ้นเมื่อตัวแปรเป็นโมฆะ (หรือว่างเปล่า):
$ unset var3 var4; var5=$(($var4-$var3))
bash: -: syntax error: operand expected (error token is "-")
ที่อาจเกิดขึ้นเนื่องจากค่าที่กำหนดให้กับ bc ไม่ถูกต้อง นั่นอาจเป็นไปได้ว่า bc ต้องการค่า UPPERcase มันต้องไม่BFCA3000
bfca3000
ที่แก้ไขได้อย่างง่ายดายใน bash เพียงใช้ส่วน^^
ขยาย:
var3=bfca3000; var3=`echo "ibase=16; ${var1^^}" | bc`
ที่จะเปลี่ยนสคริปต์เป็นสิ่งนี้:
#!/bin/bash
var1="bfca3000"
var2="efca3250"
var3="$(echo "ibase=16; ${var1^^}" | bc)"
var4="$(echo "ibase=16; ${var2^^}" | bc)"
var5="$(($var4-$var3))"
echo "Diference $var5"
แต่ไม่จำเป็นต้องใช้ bc [1] เนื่องจาก bash สามารถทำการแปลและการย่อยได้โดยตรง:
#!/bin/bash
var1="bfca3000"
var2="efca3250"
var5="$(( 16#$var2 - 16#$var1 ))"
echo "Diference $var5"
[1] หมายเหตุ: ฉันสมมติว่าค่าสามารถแสดงในคณิตศาสตร์ 64 บิตได้เนื่องจากความแตกต่างคำนวณเป็น bash ในสคริปต์ต้นฉบับของคุณ Bash ถูก จำกัด ไว้ที่จำนวนเต็มน้อยกว่า ((2 ** 63) -1) หากคอมไพล์เป็น 64 บิต นั่นจะเป็นข้อแตกต่างเพียงอย่างเดียวกับ bc ซึ่งไม่มีขีด จำกัด ดังกล่าว