ฉันทำงานกับ Bash 3 และฉันพยายามสร้างเงื่อนไข ใน C / C ++ มันง่ายที่ตายแล้ว: ((A || B) && C)
. ใน Bash มันไม่เป็นเช่นนั้น (ฉันคิดว่าผู้แต่ง Git ต้องมีส่วนร่วมในรหัสนี้ก่อนที่จะย้ายไปสู่ความพยายามอื่น ๆ )
สิ่งนี้ใช้ไม่ได้ โปรดทราบว่า<0 or 1>
ไม่ใช่ตัวอักษรสตริง; มันหมายถึง 0 หรือ 1 (โดยทั่วไปมาจากgrep -i
)
A=<0 or 1>
B=<0 or 1>
C=<0 or 1>
if [ [ "$A" -eq "0" ] || [ "$B" -ne "0" ] ] && [ "$C" -eqe "0" ]; then ... fi
มันส่งผลใน:
line 322: syntax error near unexpected token `[['
ฉันลองแล้ว:
A=<0 or 1>
B=<0 or 1>
C=<0 or 1>
if [ ([ "$A" -eq "0" ]) || ([ "$B" -ne "0" ]) ] && [ "$C" -eq "0" ]; then ... fi
มันส่งผลให้:
line 322: syntax error near unexpected token `[['
ส่วนหนึ่งของปัญหาคือผลการค้นหาเป็นตัวอย่างเล็ก ๆ น้อย ๆ และไม่ใช่ตัวอย่างที่ซับซ้อนกว่าที่มีเงื่อนไขแบบผสม
ฉันจะแสดงแบบเรียบง่าย((A || B) && C)
ใน Bash ได้อย่างไร
ฉันพร้อมที่จะคลี่คลายมันและทำซ้ำคำสั่งเดียวกันในหลาย ๆ บล็อก:
A=<0 or 1>
B=<0 or 1>
C=<0 or 1>
if [ "$A" -eq "0" ] && [ "$C" -eq "0" ]; then
...
elif [ "$B" -ne "0" ] && [ "$C" -eq "0" ]; then
...
fi