Anda seharusnya hanya menggunakan #! /bin/sh
.
Anda seharusnya tidak menggunakan ekstensi bash (atau zsh, atau fish, atau ...) dalam skrip shell.
Anda harus hanya pernah menulis skrip shell yang bekerja dengan setiap pelaksanaan bahasa shell (termasuk semua "utilitas" program yang pergi bersama dengan shell itu sendiri). Saat ini Anda mungkin dapat menggunakan POSIX.1-2001 ( tidak -2008) sebagai otoritatif untuk kemampuan shell dan utilitas, tetapi perlu diketahui bahwa suatu hari Anda mungkin diminta untuk mem-porting skrip Anda ke sistem lawas (mis. Solaris atau AIX) yang cangkangnya dan utilitasnya dibekukan sekitar tahun 1992.
Apa, serius ?!
Ya, serius.
Begini masalahnya: Shell adalah bahasa pemrograman yang mengerikan . Satu-satunya hal yang telah terjadi adalah bahwa /bin/sh
adalah satu-satunya juru bahasa script yang setiap instalasi Unix dijamin miliki.
Inilah hal lainnya: beberapa iterasi dari interpreter inti Perl 5 ( /usr/bin/perl
) lebih mungkin tersedia pada instalasi Unix yang dipilih secara acak daripada (/(usr|opt)(/(local|sfw|pkg)?)?/bin/bash
. Bahasa scripting lain yang bagus (Python, Ruby, node.js, dll. - Saya bahkan akan memasukkan PHP dan Tcl dalam kategori itu ketika membandingkan dengan shell) juga kira-kira tersedia sebagai bash dan shell diperluas lainnya.
Oleh karena itu, jika Anda memiliki opsi untuk menulis skrip bash, Anda memiliki opsi untuk menggunakan bahasa pemrograman yang tidak buruk.
Sekarang, skrip shell sederhana , jenis yang hanya menjalankan beberapa program secara berurutan dari pekerjaan cron atau sesuatu, tidak ada yang salah dengan membiarkannya sebagai skrip shell. Tetapi skrip shell sederhana tidak membutuhkan array atau fungsi atau [[
bahkan. Dan Anda hanya harus menulis skrip shell rumit ketika Anda tidak punya pilihan lain. Skrip autoconf, misalnya, adalah skrip shell yang benar. Tetapi skrip-skrip tersebut harus dijalankan pada setiap inkarnasi /bin/sh
yang relevan dengan program yang sedang dikonfigurasi. dan itu berarti mereka tidak dapat menggunakan ekstensi apa pun. Anda mungkin tidak perlu peduli dengan Unix lama yang sudah dipatenkan belakangan ini, tetapi Anda mungkin harus peduli dengan BSD sumber terbuka saat ini, beberapa di antaranya tidak menginstalbash
secara default, dan lingkungan tertanam yang memberi Anda hanya shell minimal dan busybox
.
Kesimpulannya, saat Anda mendapati diri Anda menginginkan fitur yang tidak tersedia dalam bahasa shell portabel, itu adalah tanda bahwa skrip menjadi terlalu rumit untuk tetap menggunakan skrip shell. Tulis ulang dalam bahasa yang lebih baik.
bash
fungsi dan sintaks daripadash
fungsi dan sintaksis.