การอ่านอาร์กิวเมนต์จากบรรทัดคำสั่ง
แยกวิเคราะห์ argv ด้วยตัวจัดสรรหน่วยความจำ
การอ่านอาร์กิวเมนต์จากบรรทัดคำสั่ง เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดอาร์กิวเมนต์จึงสำคัญ
เครื่องมือ CLI ที่ใช้งานจริงจะตอบสนองต่อสิ่งที่ผู้ใช้พิมพ์หลังชื่อโปรแกรม คำเหล่านั้นคืออาร์กิวเมนต์บรรทัดคำสั่ง และการอ่านคำเหล่านั้นคือขั้นตอนแรก 🛠️
Zig ไม่ซ่อนสิ่งใดให้คุณ
ภาษาอื่นอาจมอบตัวแปร argv แบบมหัศจรรย์ให้คุณ แต่ Zig ยังคงระบุอย่างชัดเจน คุณต้องขออาร์กิวเมนต์ด้วยตนเองจากเนมสเปซ std.process
const std = @import("std");อาร์กิวเมนต์ต้องใช้ตัวจัดสรร
การถอดรหัสอาร์กิวเมนต์อาจต้องจัดสรรหน่วยความจำ ดังนั้น Zig จึงขอให้คุณระบุตัวจัดสรรตั้งแต่ต้น ไม่มีการจัดสรรใดเกิดขึ้นเบื้องหลังโดยที่คุณไม่ทราบ
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
const a = gpa.allocator();argsAlloc มอบสไลซ์ให้
เรียก std.process.argsAlloc พร้อมตัวจัดสรรของคุณ ฟังก์ชันนี้คืนสไลซ์ของสตริง โดยมีหนึ่งสตริงต่อหนึ่งอาร์กิวเมนต์ และคุณเป็นเจ้าของทั้งหมด
const args = try std.process.argsAlloc(a);คืนสิ่งที่คุณจัดสรร
เนื่องจากคุณเป็นเจ้าของสไลซ์นั้น คุณจึงต้องคืนหน่วยความจำด้วย argsFree การใช้ defer ทันทีหลังการเรียกจะทำให้การล้างข้อมูลเกิดขึ้นโดยอัตโนมัติ
defer std.process.argsFree(a, args);อาร์กิวเมนต์แรกคือโปรแกรม
ตามธรรมเนียมแล้ว args[0] คือพาธไปยังโปรแกรมของคุณเอง ไม่ใช่ข้อมูลป้อนเข้าจากผู้ใช้ ค่าจริงที่คุณสนใจจะเริ่มที่ดัชนี 1
const program = args[0];นับจำนวนที่ได้รับ
สไลซ์เก็บความยาวของตัวเองไว้ ดังนั้น args.len จะบอกว่ามีอาร์กิวเมนต์เข้ามากี่รายการ คุณควรตรวจสอบค่านี้ก่อนเข้าถึงดัชนีใด ๆ
if (args.len < 2) return error.MissingArgument;วนซ้ำผ่านข้อมูลป้อนเข้า
วนซ้ำค่าของผู้ใช้โดยตัดส่วนชื่อโปรแกรมออก ลูป for ที่ทำงานกับ args[1..] จะเข้าถึงอาร์กิวเมนต์แต่ละรายการตามลำดับ
for (args[1..]) |arg| {
std.debug.print("{s}\n", .{arg});
}อาร์กิวเมนต์แต่ละรายการคือไบต์
อาร์กิวเมนต์ทุกตัวเป็น []const u8 ซึ่งเป็นสไลซ์ของไบต์ จากจุดนี้ การเปรียบเทียบหรือแยกวิเคราะห์อาร์กิวเมนต์ก็เป็นเพียงการจัดการสตริงตามปกติใน Zig
if (std.mem.eql(u8, arg, "--help")) {}เปลี่ยนข้อความเป็นตัวเลข
อาร์กิวเมนต์จะเข้ามาในรูปข้อความ หากต้องการตัวเลข ให้แยกวิเคราะห์ด้วย std.fmt.parseInt ซึ่งจะแจ้งข้อผิดพลาดอย่างชัดเจนหากข้อความไม่ใช่จำนวนเต็มที่ถูกต้อง
const n = try std.fmt.parseInt(i32, args[1], 10);ทางเลือกแบบตัววนซ้ำ
ต้องการประมวลผลแบบสตรีมใช่ไหม std.process.argsWithAllocator จะมอบตัววนซ้ำที่คุณเลื่อนไปข้างหน้าด้วย next() เหมาะสำหรับการประมวลผลอาร์กิวเมนต์ทีละรายการ
var it = try std.process.argsWithAllocator(a);
defer it.deinit();ตรวจสอบอย่างรวดเร็ว
ลองนึกดูว่าสิ่งใดอยู่ด้านหน้าของสไลซ์อาร์กิวเมนต์
สรุป
คุณอ่านอาร์กิวเมนต์ด้วย argsAlloc คืนหน่วยความจำด้วย argsFree ข้าม args[0] และแยกวิเคราะห์ข้อความเป็นค่า ตอนนี้ CLI ของคุณรับฟังผู้ใช้ได้แล้ว 🎯
คำถามที่พบบ่อย
บทเรียน “การอ่านอาร์กิวเมนต์จากบรรทัดคำสั่ง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การอ่านอาร์กิวเมนต์จากบรรทัดคำสั่ง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การอ่านอาร์กิวเมนต์จากบรรทัดคำสั่ง”
แยกวิเคราะห์ argv ด้วยตัวจัดสรรหน่วยความจำ คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “การอ่านอาร์กิวเมนต์จากบรรทัดคำสั่ง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม
ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การอ่านอาร์กิวเมนต์จากบรรทัดคำสั่ง
- การอ่านไฟล์และ stdin
- การเขียนเอาต์พุตและรหัสจบการทำงาน
- จัดแพ็กเกจและเผยแพร่ไบนารี