สิ่งที่เห็นได้ชัดเป็นครั้งแรกที่คุณควรให้ช่องว่างระหว่างข้อโต้แย้งของ[, testหรือ[[:
if [ "$1" = 1 ];
เมื่ออยู่ใน Bash [[ ]]แนะนำให้ใช้เนื่องจากจะไม่ทำสิ่งที่ไม่จำเป็นสำหรับการแสดงออกตามเงื่อนไขเช่นการแยกคำและการขยายชื่อพา ธ ไม่จำเป็นต้องมีการเสนอราคา ผู้ประกอบการอ่านได้มากขึ้น==นอกจากนี้ยังสามารถนำมาใช้
if [[ $1 == 1 ]];
เพิ่มหมายเหตุ: หากถูกดำเนินการที่สองนอกจากนี้ยังมีตัวแปรที่อ้างเป็นสิ่งที่จำเป็นในขณะที่มันอาจจะมีการจับคู่รูปแบบถ้ามันมีตัวละครที่เป็นที่รู้จักเช่น*, ?, []ฯลฯ .. ถ้าขยาย globbing หรือจับคู่รูปแบบการใช้งานด้วยshopt -s extglobรูปแบบอื่น ๆ ชอบ@(), !()ฯลฯ จะได้รับการยอมรับว่าเป็นรูปแบบ ดูรูปแบบการจับคู่
ด้วยโอเปอเรเตอร์ที่ชอบ<และ>อาจยังจำเป็นเพราะฉันเคยพบข้อผิดพลาดที่ไม่ได้อ้างถึงข้อโต้แย้งที่สองทำให้เกิดผลลัพธ์ที่แตกต่างกัน
สำหรับตัวถูกดำเนินการแรกไม่มีสิ่งใดนำไปใช้
พิจารณารูปแบบที่ง่ายกว่านี้เช่นกัน:
case "$1" in
1)
mv -- "${@:2}" ~/lab/Sun
;;
2)
mv -- "${@:2}" ~/lab/Moon
;;
3)
mv -- "${@:2}" ~/lab/Earth
;;
esac
หรือย่อ:
case "$1" in
1) mv -- "${@:2}" ~/lab/Sun ;;
2) mv -- "${@:2}" ~/lab/Moon ;;
3) mv -- "${@:2}" ~/lab/Earth ;;
esac
"${@:2}"เป็นรูปแบบของการขยายสตริงย่อยหรือการขยายสมาชิกอาร์เรย์โดยที่2ออฟเซ็ต สิ่งนี้ทำให้การขยายเริ่มต้นที่ค่าที่สอง shiftด้วยวิธีนี้เราอาจไม่จำเป็นต้องใช้
การ--ป้องกันที่เพิ่มเข้ามาmvจากการรู้จักชื่อไฟล์ที่ขึ้นต้นด้วยขีด ( -) เป็นตัวเลือกที่ไม่ถูกต้อง
$var,$(cmd)และแม้กระทั่ง`cmd`[ที่$(cmd)ควรได้รับการแนะนำ]) มีบางกรณีที่คุณไม่จำเป็นต้องพูด แต่จะทำไม่ได้เจ็บ