[ -n ]ไม่ใช้การ-nทดสอบ
-nใน[ -n ]ไม่ได้มีการทดสอบในทุก เมื่อมีเพียงหนึ่งอาร์กิวเมนต์ระหว่าง[และ]อาร์กิวเมนต์นั้นเป็นสตริงที่ทดสอบเพื่อดูว่าว่างเปล่าหรือไม่ แม้เมื่อสตริงนั้นมีผู้นำ-มันก็ยังถูกตีความว่าเป็นตัวถูกดำเนินการไม่ทดสอบ ตั้งแต่สาย-nไม่ว่างเปล่า - มันมีตัวละครทั้งสอง-และn, ไม่เป็นศูนย์ characters-- [ -n ]ประเมินให้เป็นจริง
ในฐานะที่เป็นอิกนาซิโอ Vazquez อับราฮัมกล่าวว่าที่stringเป็นอาร์กิวเมนต์เดียว, การทดสอบดำเนินการในstringในเป็นเช่นเดียวกับการทดสอบดำเนินการเกี่ยวกับมันด้วย เมื่อเกิดขึ้นจะไม่มีอะไรพิเศษเกิดขึ้น ในและครั้งที่สองในการเป็นเพียงสายการทดสอบสำหรับความว่างเปล่า[ string ][ -n string ]string-n-n[ -n ]-n[ -n -n ]
เมื่อมีข้อโต้แย้งเพียงข้อเดียวระหว่าง[ถึง]ข้อโต้แย้งนั้นจะเป็นสตริงที่จะถูกทดสอบเสมอสำหรับความไม่พร้อมเพรียงแม้ว่าจะมีการตั้งชื่อเหมือนกับการทดสอบ ในทำนองเดียวกันเมื่อมีข้อโต้แย้งสองข้อระหว่าง[และ]ถึงข้อแรก-nข้อที่สองคือสตริงที่จะทำการทดสอบสำหรับความไม่ว่างแม้ว่ามันจะมีชื่อเหมือนกับการทดสอบก็ตาม นี่เป็นเพียงเพราะไวยากรณ์สำหรับ[ยืนยันว่าอาร์กิวเมนต์เดียวระหว่าง[และ]หรือหลัง-nเป็นตัวถูกดำเนินการสตริง
ด้วยเหตุผลเดียวกับที่[ -n ]ไม่ใช้การ-nทดสอบ[ -z ]อย่าใช้การ-zทดสอบ
คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ[ในbashโดยการตรวจสอบความช่วยเหลือสำหรับมัน สังเกตว่าเป็นเชลล์ในตัว :
$ type [
[ is a shell builtin
ดังนั้นคุณสามารถhelp [ขอความช่วยเหลือได้ที่:
$ help [
[: [ arg... ]
Evaluate conditional expression.
This is a synonym for the "test" builtin, but the last argument must
be a literal `]', to match the opening `['.
testสำหรับข้อมูลเพิ่มเติมรวมถึงสิ่งที่ได้รับการสนับสนุนการทดสอบและวิธีการทำงานคุณจะต้องดูความช่วยเหลือเกี่ยวกับการ เมื่อคุณเรียกใช้คำสั่งhelp testคุณจะได้รับรายการโดยละเอียด แทนที่จะทำซ้ำทั้งหมดนี่คือส่วนเกี่ยวกับตัวดำเนินการสตริง:
-z STRING True if string is empty.
-n STRING
STRING True if string is not empty.
STRING1 = STRING2
True if the strings are equal.
STRING1 != STRING2
True if the strings are not equal.
STRING1 < STRING2
True if STRING1 sorts before STRING2 lexicographically.
STRING1 > STRING2
True if STRING1 sorts after STRING2 lexicographically.
โปรดสังเกตว่า-n STRINGและSTRINGทำสิ่งเดียวกัน: ทดสอบว่าสตริงSTRINGนั้นไม่ว่างหรือไม่
[ -t ]ได้รับการทดสอบว่า stdout เป็นขั้ว (สั้น[ -t 1 ]) และเปลือกหอยบางอย่างจะยังคงทำมัน (ในกรณีของksh93เฉพาะเมื่อที่-tเป็นตัวอักษร) ดังนั้นจึงเป็นเรื่องดีที่จะใช้กว่า[ -n "$var" ][ "$var" ]แต่ที่ยังคงล้มเหลวในการเก่า ๆtestการใช้งานสำหรับค่า$varเช่น=ซึ่งในกรณีนี้[ "" != "$var" ]หรือ[ "x$var" != x ]หรือcase $x in "")...อาจจะดีกว่า