Perbedaan perilaku
Beberapa perbedaan pada Bash 4.3.11:
Rekomendasi : selalu gunakan []
.
Ada setara POSIX untuk setiap [[ ]]
konstruk yang pernah saya lihat.
Jika Anda menggunakan [[ ]]
Anda:
- kehilangan portabilitas
- memaksa pembaca untuk mempelajari seluk-beluk ekstensi bash yang lain.
[
hanyalah perintah biasa dengan nama yang aneh, tidak ada semantik khusus yang terlibat.
¹ Terinspirasi dari [[...]]
konstruksi yang setara di shell Korn
² tetapi gagal untuk beberapa nilai a
atau b
(suka +
atau index
) dan melakukan perbandingan numerik jika a
dan b
terlihat seperti bilangan bulat desimal. expr "x$a" '<' "x$b"
bekerja di sekitar keduanya.
³ dan juga gagal untuk beberapa nilai a
atau b
suka !
atau (
.
⁴ di bash 3.2 dan di atas dan kompatibilitas yang disediakan untuk bash 3.1 tidak diaktifkan (seperti dengan BASH_COMPAT=3.1
)
⁵ meskipun pengelompokan (di sini dengan {...;}
grup perintah alih-alih (...)
yang akan menjalankan subkulit yang tidak perlu) tidak diperlukan karena operator ||
dan &&
shell (sebagai lawan dari ||
dan &&
[[...]]
operator atau -o
/ -a
[
operator) memiliki prioritas yang sama. Jadi [ a = a ] || [ a = b ] && [ a = b ]
akan setara.
[[
kode itu bagus dan jelas, tetapi ingatlah hari itu ketika Anda akan mem-porting skrip Anda pada sistem dengan shell default yang bukanbash
atauksh
, dll[
lebih jelek, rumit, tetapi berfungsi sepertiAK-47
dalam situasi apa pun.