Bash Manual mengatakan:
Ketika [form digunakan, argumen terakhir ke perintah harus a].
$ type [
[ is a shell builtin
$ type ]
bash: type: ]: not found
Jadi ]
bukan kata yang dipesan, juga bukan operator, juga bukan perintah bawaan.
Sebagai token, apa pengenal token ]
? KATA atau NAMA?
[
adalah (juga) perintah mandiri: -rwxr-xr-x 1 root 39552 3 Des 18:14 / usr / bin / [Meskipun mungkin ada juga built-in "paralel", seperti ada untuk misalnyakill
. Pada beberapa sistem,test
perintahnya adalah tautan simbolis ke[
atau sebaliknya. AFAIK,]
tidak berarti apa-apa dengan sendirinya, tetapi diterima untuk "menutup" a[
- tetapi lebih karena alasan "estetika".[
(juga) perintah mandiri, biasanya mendapat halaman manual ... Jadi cobaman [
dan / atauman test
([
dantest
mungkin perintah yang sama).]
dalam tanda kutip tunggal atau ganda dan Anda akan melihatnya tidak ada bedanya; itu hanya sebuah string.Jawaban:
]
komplemen[
, itu adalah tanda penutup[
perintah.Seperti yang
man
ditunjukkan oleh halaman, ini sebenarnya adalah argumen untuk[
, tetapi[
kebetulan memperlakukannya terutama, sebagai akhir.Anda dapat menyerupai itu dengan beberapa pola penutupan perintah lainnya, misalnya
;
dalamfind .. exec
.sumber
]
?]
tidak berbeda dari karakter normal lainnya dalam konteks ini (sebagai argumen ke perintah). Thetest
perintah memperlakukan itu khusus, tapi itu terserah perintah.[
memunculkan kesalahan jika argumen terakhirnya tidak persis sama dengan]
.Bash tidak memperlakukan
[
atau]
karakter (sendiri) berbeda dari huruf alfabet.Dalam hal ini bash melihat "kata"
[
,, dan pergi mencari perintah dengan nama itu. Jika Anda melihat di sistem file Anda, Anda mungkin akan menemukan/bin/[
(atau/usr/bin/[
) ada sebagai file yang dapat dieksekusi. Seperti yang terjadi, bash juga menyediakan versi bawaan (demi efisiensi), tapi itu hanya detail implementasi.The
[
perintah (seperti dalam, dieksekusi dengan nama itu), memiliki aturan bahwa parameter terakhir yang Anda lulus untuk itu harus]
atau yang lain itu melempar kesalahan. Ini mungkin sebagian karena itu menyenangkan secara estetika, tetapi juga berfungsi untuk melindungi Anda dari perintah yang terpotong secara tidak sengaja, yang bagus.Fakta bahwa ini tidak istimewa adalah mengapa Anda tidak bisa menghilangkan ruang putih sebelum dan sesudah
[
atau]
.Pengecualian :
[
dan]
terjadi dalam format yang benar dalam kata yang sama, misalnya[a-z]
, maka itu adalah khusus dan aturan globbing bash berlaku.[[
perintah adalah khusus dan dapat melakukan banyak hal[
tidak dapat (dan parameter dalam[[ .. ]]
diproses secara berbeda, seperti juga beberapa jeda baris). Yang bersesuaian]]
juga istimewa, karena merupakan kata yang dilindungi undang-undang yang tidak boleh berupa nama perintah, dan mengakhiri pemrosesan khusus yang mengikuti[[
kata kunci.sumber
;
atau>
, itu hanya perintah bawaan seperticd
. Secara khusus, jika Anda mengetik[x
,[
tidak memiliki arti khusus.[
adalah perintah khusus , itu bukan karakter khusus .]]
lebih istimewa daripada]
. Saat menggunakan[
dan]
itu hanya kata-kata. Jika Anda menghapus]
atau menggantinya dengan kata lain, bash akan tetap berjalan[
, tetapi[
akan menghasilkan kesalahan. Namun[[
dan]]
diperlakukan istimewa pada waktu penguraian. Jika Anda diganti]]
dengan yang lain, bash akan melaporkan kesalahan sintaksis. Dan jika Anda menghapus]]
bash akan tetap menguraikan baris berikutnya mencari]]
.Untuk membuatnya lebih sederhana dari dua jawaban sebelumnya,
]
hanyalah sebuah string yang[
harus dijalankan.sumber