สิ่งที่เห็นได้ชัดเป็นครั้งแรกที่คุณควรให้ช่องว่างระหว่างข้อโต้แย้งของ[
, 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)
ควรได้รับการแนะนำ]) มีบางกรณีที่คุณไม่จำเป็นต้องพูด แต่จะทำไม่ได้เจ็บ