เมื่ออ่านสคริปต์เชลล์ตัวเดียวฉันเห็นคำว่า "$?" ความสำคัญของคำนี้คืออะไร?
เมื่ออ่านสคริปต์เชลล์ตัวเดียวฉันเห็นคำว่า "$?" ความสำคัญของคำนี้คืออะไร?
คำตอบ:
คำตอบของ Cjmนั้นถูกต้อง แต่$?
สามารถใช้ในรูปแบบที่โง่ในเชลล์สคริปต์และฉันต้องการเตือนต่อสิ่งนั้น สคริปต์เชลล์ที่ไม่ดีจำนวนมากมีรูปแบบของรหัสซ้ำ:
run_some_command
EXIT_STATUS=$?
if [ "$EXIT_STATUS" -eq "0" ]
then
# Do work when command exists on success
else
# Do work for when command has a failure exit
fi
หากเป็นไปได้ทั้งหมด (บางครั้งปัญหาเรื่องการอ่านอาจเกี่ยวข้องกับการบุกรุก) คุณควรเขียนโค้ดสถานการณ์นี้แตกต่างกัน:
if run_some_command
then
# Do work when command exists on success
else
# Do failure exit work
fi
การใช้งานครั้งหลังนี้เร็วกว่าไม่ทำให้ตัวแปรเนมสเปซของเชลล์แปรผันกับจำนวนตัวแปรชั่วคราวที่สามารถอ่านได้มากขึ้นสำหรับมนุษย์และกระตุ้นให้ใช้ "ตรรกะเชิงบวก" การฝึกเขียนเงื่อนไขโดยไม่มีการปฏิเสธ ความเรียบง่ายในสถานการณ์ส่วนใหญ่ มันออกไปด้วยการใช้$?
ส่วนใหญ่
นอกเหนือจากสิ่งที่cjm พูดว่าถ้าค่า$?
เป็น 0 ดังนั้นกระบวนการก่อนหน้านี้จึงยุติโดยปกติ (หรือสำเร็จ) มิฉะนั้นจะเกิดข้อผิดพลาด
diff
ออกด้วย 0 หากไฟล์ที่เปรียบเทียบเป็นเหมือนกันโดยที่ 1 หากแตกต่างกันและ 2 เป็นข้อผิดพลาด
$?
- สถานะทางออกของคำสั่งสุดท้ายที่ดำเนินการ
$0
- ชื่อไฟล์ของสคริปต์ปัจจุบัน
$#
- จำนวนของอาร์กิวเมนต์ที่ส่งไปยังสคริปต์
$$
- หมายเลขกระบวนการของเชลล์ปัจจุบัน สำหรับเชลล์สคริปต์นี่คือ ID กระบวนการที่พวกเขากำลังดำเนินการอยู่
$? แจ้งสถานะการดำเนินการของคำสั่ง execute ล่าสุดให้เราทราบ ค่า '0' แสดงว่าคำสั่งถูกเรียกใช้สำเร็จและ '1' ไม่ประสบความสำเร็จ
$?
กำหนดสถานะการออกของคำสั่งที่ดำเนินการ $
ตามด้วยตัวเลข (เช่น$1
, $2
ฯลฯ ) หมายถึงพารามิเตอร์ในเชลล์สคริปต์