[ -n ]
tidak menggunakan -n
tes.
The -n
dalam [ -n ]
bukan tes sama sekali. Ketika hanya ada satu argumen di antara [
dan ]
, argumen itu adalah string yang diuji untuk melihat apakah argumen itu kosong. Bahkan ketika string itu memiliki pimpinan -
, itu masih ditafsirkan sebagai operan, bukan tes. Karena string -n
tidak kosong - itu berisi dua karakter, -
dan n
, bukan nol karakter - [ -n ]
dievaluasi menjadi true.
Seperti yang dikatakan Ignacio Vazquez-Abrams , di mana string
ada satu argumen, tes yang dilakukan string
dalam sama dengan tes yang dilakukan oleh . Ketika kebetulan , tidak ada yang istimewa terjadi. The dalam dan yang kedua di hanya string sedang diuji untuk kekosongan.[ string ]
[ -n string ]
string
-n
-n
[ -n ]
-n
[ -n -n ]
Ketika hanya ada satu argumen di antara [
dan ]
, argumen itu selalu merupakan string yang akan diuji untuk kekosongan, bahkan jika itu dinamai sama dengan tes. Demikian pula, ketika ada dua argumen di antara [
dan ]
dan yang pertama adalah -n
, yang kedua selalu merupakan string yang akan diuji untuk nonemptiness, bahkan jika kebetulan diberi nama sama dengan tes. Ini hanya karena sintaks untuk [
menegaskan bahwa argumen tunggal antara [
dan ]
atau sesudahnya -n
adalah operan string.
Untuk alasan yang sama yang [ -n ]
tidak menggunakan -n
tes, [ -z ]
tidak menggunakan -z
tes.
Anda dapat mempelajari lebih lanjut tentang [
di bash
dengan memeriksa bantuan untuk itu. Perhatikan bahwa shell adalah builtin :
$ type [
[ is a shell builtin
Dengan demikian Anda dapat lari help [
untuk mendapatkan bantuan tentang hal itu:
$ 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 `['.
Untuk informasi lebih lanjut, termasuk tes apa yang didukung dan cara kerjanya, Anda harus melihat bantuannya test
. Ketika Anda menjalankan perintah help test
, Anda akan mendapatkan daftar terperinci. Daripada mereproduksi semuanya, inilah bagian tentang operator string:
-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.
Perhatikan itu -n STRING
dan STRING
lakukan hal yang sama: mereka menguji apakah string STRING
tidak kosong.
[ -t ]
sedang menguji apakah stdout adalah terminal (kependekan[ -t 1 ]
) dan beberapa shell masih melakukannya (dalam kasusksh93
hanya ketika itu-t
literal), jadi lebih baik digunakan[ -n "$var" ]
daripada[ "$var" ]
. Meskipun itu masih akan gagal dalam beberapatest
implementasi lama untuk nilai-nilai$var
suka=
, dalam hal ini[ "" != "$var" ]
atau[ "x$var" != x ]
ataucase $x in "")...
mungkin lebih baik.