การเขียนสคริปต์เชลล์: ตัวเลือก -z และ -n ด้วย if


53

ฉันมีเชลล์สคริปต์ที่เรามีบรรทัดต่อไปนี้if [ -z "$xyz" ]และif [ -n "$abc" ]แต่ฉันไม่แน่ใจว่าจุดประสงค์ของพวกเขาคืออะไร ใครช่วยอธิบายหน่อยได้ไหม

คำตอบ:


63

คุณสามารถค้นหาข้อมูลอ้างอิงที่ดีมากสำหรับผู้ประกอบการทุบตีของที่นี่ หากคุณกำลังใช้เปลือกที่แตกต่างกันเพียงแค่ค้นหา<my shell> operatorsและคุณจะพบทุกสิ่งที่คุณต้องการ ในกรณีเฉพาะของคุณคุณกำลังใช้:

-n
   string is not null.

-z
  string is null, that is, has zero length

เพื่อแสดง:

$ foo="bar";
$ [ -n "$foo" ] && echo "foo is not null"
foo is not null
$ [ -z "$foo" ] && echo "foo is null"
$ foo="";
$ [ -n "$foo" ] && echo "foo is not null"
$ [ -z "$foo" ] && echo "foo is null"
foo is null

3

man testหรือman [จะให้ตัวเลือกทั้งหมดแก่คุณเพื่อทดสอบคำสั่ง ในกรณีนี้ -n กำลังทดสอบเพื่อดูว่าเนื้อหาของ $ abc มีความยาวไม่เป็นศูนย์และ -z กำลังทดสอบเพื่อดูว่าเนื้อหาของ $ xyz เป็นสตริงที่มีความยาวเป็นศูนย์หรือไม่


man [ใช้ไม่ได้สำหรับฉันใน GNU bash, รุ่น 4.1.2 (1) - ปล่อย (x86_64-redhat-linux-gnu) แต่ +1 สำหรับการทดสอบของมนุษย์
andrew lorien

1
Note man test(เสมอ?) ให้ man page สำหรับโปรแกรมภายนอกซึ่ง (สำหรับ GNU-coreutils version อย่างน้อย) เตือนอย่างชัดเจนว่าบางเชลล์ (IME ส่วนใหญ่) มีรุ่น builtin ที่อาจแตกต่างกัน
dave_thompson_085
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.