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 aatau b(suka +atau index) dan melakukan perbandingan numerik jika adan bterlihat seperti bilangan bulat desimal. expr "x$a" '<' "x$b"bekerja di sekitar keduanya.
³ dan juga gagal untuk beberapa nilai aatau bsuka !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 bukanbashatauksh, dll[lebih jelek, rumit, tetapi berfungsi sepertiAK-47dalam situasi apa pun.