มาใช้ตัวเลือกแบบยาวในสคริปต์กันเถอะ
(matklad.github.io)- ยูทิลิตีบรรทัดคำสั่งจำนวนมากรองรับทั้งตัวเลือกแบบสั้น(
-f)และตัวเลือกแบบยาว(--force) - แบบสั้นมีไว้สำหรับการใช้งานเชิงโต้ตอบ และแนะนำให้ใช้แบบยาวในสคริปต์
- ตัวอย่างเช่น ในเทอร์มินัลเราจะพิมพ์
$ git switch -c my-new-branch - แต่ในสคริปต์สำหรับรีลีสจะเขียนดังนี้:
try shell.exec("git fetch origin --quiet", .{});try shell.exec("git switch --create release-{today} origin/main", .{ .today = stdx.DateUTC.now() }, );
- ตัวเลือกแบบยาวอธิบายความหมายให้ผู้อ่านได้ชัดเจนกว่ามาก
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ชอบใช้ตัวเลือกแบบยาว แต่เมื่อจำเป็นต้องเรียกคำสั่ง POSIX ให้พกพาได้ ตัวเลือกแบบสั้นคือทางเลือกเดียว เพราะ POSIX ไม่ได้ระบุตัวเลือกแบบยาว
diffได้grepการใช้บางอย่างอย่างlibpcreอาจมีประสิทธิภาพกว่าgit,hg,rg,agการใช้ตัวเลือกแบบยาวถือว่าสมเหตุสมผลไม่ควรผสม string interpolation กับการรันคำสั่ง
execv(2),execvp(2)เป็นต้นเห็นด้วยว่าควรใช้ตัวเลือกแบบยาว แต่ก็ต้องคำนึงถึงความพกพาได้
อย่าลืมใช้
--หลังตัวเลือกทั้งหมด และก่อนอาร์กิวเมนต์แบบไดนามิกควรตรวจสอบก่อนเรียกคำสั่งว่าความยาวของคำสั่งเกิน
ARG_MAXหรือไม่grep --ignore-case --files-with-matches -- "hello" *.cCMD="grep --ignore-case --files-with-matches -- \"hello\" *.c"ARG_MAX=$(getconf ARG_MAX)CMD_LEN=${#CMD}if (( CMD_LEN > ARG_MAX )); thenecho "Error: Command length ($CMD_LEN) exceeds ARG_MAX ($ARG_MAX)." >&2exit 1fieval "$CMD"# คำเตือน: ประเมินชื่อไฟล์เห็นด้วยกับวิธีนี้ อีกข้อดีคือค้นหาใน man page ได้ง่ายขึ้นว่าตัวเลือกนั้นทำอะไร
ถ้าต้องการให้สคริปต์พกพาไปยังระบบ POSIX อื่นได้ อาจจำเป็นต้องใช้ตัวเลือกแบบสั้น
ควรวางตัวเลือกไว้คนละบรรทัด เพื่อให้ติดตามและ
git blameได้ง่ายนี่เป็นหนึ่งในกฎพื้นฐานเวลาเขียนสคริปต์ ถ้าใช้ตัวเลือกแบบยาวได้ก็ควรใช้
ตัวเลือกแบบยาวอ่านแล้วอธิบายความหมายให้ผู้อ่านได้มากกว่า