Semua variasi bahasa shell Bourne secara objektif mengerikan dibandingkan dengan bahasa scripting modern seperti Perl, Python, Ruby, node.js, dan bahkan (bisa dibilang) Tcl. Jika Anda harus melakukan sesuatu yang sedikit rumit, Anda akan lebih bahagia dalam jangka panjang jika Anda menggunakan salah satu di atas daripada skrip shell.
Satu-satunya keuntungan bahasa shell masih memiliki lebih dari bahasa-bahasa yang lebih baru adalah bahwa sesuatu yang memanggil itu sendiri /bin/sh
dijamin ada pada apa pun yang dimaksudkan sebagai Unix. Namun, sesuatu yang bahkan mungkin tidak sesuai dengan POSIX; banyak dari warisan Unix miliknya membekukan bahasa yang diterapkan oleh /bin/sh
dan utilitas di PATH default sebelum perubahan yang diminta oleh Unix95 (ya, Unix95, dua puluh tahun yang lalu dan terus bertambah). Mungkin ada satu set Unix95, atau bahkan POSIX.1-2001 jika Anda beruntung, alat-alat dalam direktori tidak pada PATH default (misalnya /usr/xpg4/bin
) tetapi mereka tidak dijamin ada.
Namun, dasar-dasar Perl lebih mungkin untuk hadir pada instalasi Unix yang dipilih secara sewenang-wenang daripada Bash. (Dengan "dasar-dasar Perl" yang saya maksud /usr/bin/perl
ada dan beberapa , mungkin versi yang cukup lama, dari Perl 5, dan jika Anda beruntung, set modul yang dikirimkan dengan versi interpreter juga tersedia.)
Karena itu:
Jika Anda menulis sesuatu yang harus berfungsi di mana saja yang dimaksudkan sebagai Unix (seperti skrip "configure"), Anda perlu menggunakan #! /bin/sh
, dan Anda tidak perlu menggunakan ekstensi apa pun. Saat ini saya akan menulis shell yang sesuai dengan POSIX.1-2001 dalam situasi ini, tetapi saya akan siap untuk memperbaiki POSIXisms jika seseorang meminta dukungan untuk besi yang berkarat.
Tetapi jika Anda tidak menulis sesuatu yang harus bekerja di mana-mana, maka saat Anda tergoda untuk menggunakan Bashism sama sekali, Anda harus berhenti dan menulis ulang semuanya dalam bahasa scripting yang lebih baik. Masa depan Anda akan berterima kasih.
(Jadi ketika sedang pantaskah untuk menggunakan Bash ekstensi Untuk urutan pertama: tidak pernah Untuk urutan kedua: hanya untuk memperpanjang lingkungan yang interaktif Bash - misalnya untuk menyediakan pintar tab-completion dan mewah petunjuknya?..)
#!/bin/sh
dan jangan gunakan apa pun selain yang disediakan oleh shell asli.