Sejauh yang saya tahu, [[
adalah versi yang disempurnakan [
, tapi saya bingung ketika saya melihat [[
sebagai kata kunci dan [
ditampilkan sebagai builtin.
[root@server ~]# type [
[ is a shell builtin
[root@server ~]# type [[
[[ is a shell keyword
TLDP berkata
Sebuah builtin mungkin merupakan sinonim dari perintah sistem dengan nama yang sama, tetapi Bash menambahkannya secara internal. Sebagai contoh, perintah echo Bash tidak sama dengan / bin / echo, meskipun perilaku mereka hampir identik.
dan
Kata kunci adalah kata, token, atau operator yang dicadangkan. Kata kunci memiliki arti khusus untuk shell, dan memang merupakan blok bangunan dari sintaks shell. Sebagai contoh, untuk, sementara, lakukan, dan! adalah kata kunci. Mirip dengan builtin, kata kunci dikodekan ke dalam Bash, tetapi tidak seperti builtin, kata kunci tidak dengan sendirinya merupakan perintah, tetapi subunit dari perintah yang dibangun. [2]
Bukankah itu berarti keduanya [
dan [[
kata kunci? Apakah ada sesuatu yang saya lewatkan di sini? Juga, tautan ini menegaskan kembali bahwa keduanya [
dan [[
harus memiliki jenis yang sama.
if "[" $x -eq 3 ]
bekerja seperti yang diharapkan (karena Bash mencari perintah yang disebut [
, dan ini ada), tapi if "[[" $x -eq 3 ]]
tidak tidak bekerja (karena sekali lagi Bash mencari perintah dari nama yang tepat, tetapi tidak ada [[
perintah).
/usr/bin/echo
, tapi itu tidak berarti itu bukan builtin .