Apa artinya menjadi "kompatibel dengan"?

63

Saya telah melihat frasa "sh kompatibel" yang digunakan biasanya mengacu pada shell. Saya tidak yakin apakah itu juga berlaku untuk program yang mungkin dijalankan dari dalam shell.

Apa artinya shell atau program lain menjadi "kompatibel dengan sh"? Apa artinya menjadi "tidak kompatibel"?

Sunting: Pertanyaan ini menanyakan perbedaan antara bash dan sh sangat relevan: Perbedaan antara sh dan bash

Saya masih ingin jawaban langsung tentang apa artinya menjadi "kompatibel dengan sh". Sebuah harapan yang masuk akal mungkin bahwa "sh kompatibel" berarti "mengimplementasikan Bahasa Perintah Shell" tetapi lalu mengapa ada begitu banyak shell "sh kompatibel" dan mengapa mereka berbeda?

Praxeolitic
sumber
1
Untuk skrip shell, ini merujuk pada apakah skrip tersebut menggunakan sintaks yang kompatibel (dapat dijalankan) dengan Bourne Shell ( sh). Untuk shell yang berbeda, ini mengacu pada apakah shell dapat menjalankan skrip Bourne shell atau tidak.
HalosGhost
Jika Anda ingin mempelajari penemu kerang, Anda dapat mengunjungi jawaban saya di unix.stackexchange.com/questions/45684/…
PersianGulf

Jawaban:

116

Mengapa ada begitu banyak kerang "yang kompatibel"?

The Bourne shell pertama kali dirilis ke publik pada tahun 1979 sebagai bagian dari Unix V7 . Karena hampir semua sistem seperti Unix dan Unix diturunkan dari V7 Unix - bahkan jika hanya secara spiritual - cangkang Bourne telah bersama kita "selamanya." ¹

Cangkang Bourne benar-benar menggantikan cangkang sebelumnya, mengulang kembali cangkang Thompson , tetapi itu terjadi begitu awal dalam sejarah Unix sehingga semuanya terlupakan hari ini. Cangkang Bourne adalah superset dari cangkang Thompson

Kedua kulit Bourne dan Thompson disebut sh. The shell yang ditentukan oleh POSIX juga disebut sh. Jadi, ketika seseorang mengatakan sh-compatible, mereka dengan tangan merujuk pada rangkaian kerang ini. Jika mereka ingin lebih spesifik, mereka akan mengatakan "POSIX shell" atau "Bourne shell." ³

Cangkang POSIX didasarkan pada versi 1988 KornShell , yang pada gilirannya dimaksudkan untuk menggantikan cangkang Bourne pada AT&T Unix, melompati cangkang BSD C dalam hal fitur. Sejauh kshnenek moyang cangkang POSIX, kebanyakan Sistem Unix dan Unix like termasuk beberapa varian dari shell Korn saat ini. Pengecualian pada umumnya adalah sistem embedded kecil, yang tidak mampu membeli ruang yang dibutuhkan oleh shell POSIX lengkap.

Yang mengatakan, shell Korn - sebagai hal yang berbeda dari shell POSIX - tidak pernah benar-benar menjadi populer di luar dunia komersial Unix. Ini karena kenaikannya berhubungan dengan tahun-tahun awal komersialisasi Unix, sehingga terperangkap dalam perang Unix . BSD Unix menolak untuk mendukung shell C, dan kode sumbernya tidak tersedia secara bebas untuk digunakan di Linux ketika dimulai. "Jadi, ketika distributor Linux awal mencari shell perintah untuk pergi dengan kernel Linux mereka, mereka biasanya memilih GNU Bash , salah satu dari yang shkompatibel yang Anda bicarakan .⁶

Hubungan awal antara Linux dan Bash itu cukup menyegel nasib banyak shell lain, termasuk ksh, cshdan tcsh. Masih ada banyak yang masih menggunakan kerang-kerang itu hari ini, tetapi mereka sangat minoritas .⁷

Semua sejarah ini menjelaskan mengapa pencipta pengguna akhir relatif suka bash,, zshdan yashmemilih untuk membuatnya sh-kompatibel: Kompatibilitas Bourne / POSIX adalah jumlah minimum yang harus disediakan oleh shell untuk sistem yang mirip Unix untuk mendapatkan adopsi yang tersebar luas.

Dalam banyak sistem, shell perintah interaktif default dan /bin/shhal-hal yang berbeda. /bin/shmungkin:

  • Shell Bourne asli. Ini biasa terjadi pada sistem UNIX® lama, seperti Solaris 10 (dirilis pada 2005) dan pendahulunya.⁸

  • Cangkang bersertifikat POSIX. Ini umum di sistem UNIX® yang lebih baru, seperti Solaris 11 (2010).

  • The Almquist shell . Ini adalah klon shell Bourne / POSIX open source yang awalnya dirilis di Usenet pada tahun 1989 , yang kemudian berkontribusi pada CSRG Berkeley untuk dimasukkan dalam rilis BSD pertama yang tidak mengandung kode sumber AT&T, 4.4BSD-Lite . Shell Almquist sering disebut ash, bahkan ketika diinstal sebagai /bin/sh.

    4.4BSD-Lite pada gilirannya menjadi basis untuk semua turunan BSD modern, dengan /bin/shtetap sebagai turunan Almquist di sebagian besar dari mereka, dengan satu pengecualian utama yang disebutkan di bawah ini. Anda dapat melihat penurunan langsung ini di repositori kode sumber untuk NetBSD dan FreeBSD : mereka mengirimkan turunan shell Almquist mulai hari pertama.

    Ada dua ashgarpu penting di luar dunia BSD:

    1. dash, yang terkenal diadopsi oleh Debian dan Ubuntu pada tahun 2006 sebagai /bin/shimplementasi default . (Bash tetap menjadi shell perintah interaktif bawaan dalam turunan Debian.)

    2. The ashperintah di BusyBox , yang sering digunakan dalam Linuxes tertanam dan dapat digunakan untuk mengimplementasikan /bin/sh. Karena lewat bulan dashdan itu berasal dari tua Debian ashpaket , saya telah memilih untuk menganggapnya sebagai turunan dari dashdaripada ash, meskipun nama perintah dalam waktu BusyBox.

      (BusyBox juga menyertakan alternatif yang kurang menarik untuk ashdipanggil hush. Biasanya hanya satu dari keduanya yang akan dibangun ke dalam biner BusyBox yang diberikan: ashsecara default, tetapi hushketika ruang sangat ketat. Dengan demikian, /bin/shpada sistem berbasis BusyBox tidak selalu dashseperti-suka.)

  • GNU Bash , yang menonaktifkan sebagian besar ekstensi non-POSIX ketika dipanggil sebagaish .

    Pilihan ini tipikal untuk varian desktop dan server Linux, kecuali untuk Debian dan turunannya. Mac OS X juga telah melakukan ini sejak Panther, dirilis pada tahun 2003.

  • Shell dengan ksh93ekstensi POSIX , seperti pada OpenBSD . Meskipun shell OpenBSD mengubah perilaku untuk menghindari sintaksis dan ketidaksesuaian semantik dengan shell Bourne dan POSIX ketika dipanggil sh, shell ini tidak menonaktifkan ekstensi murni apa pun, karena shell yang tidak bertentangan dengan shell yang lebih lama.

    Ini tidak umum; Anda seharusnya tidak mengharapkan ksh93fitur dalam /bin/sh.

Saya menggunakan "shell script" di atas sebagai istilah umum yang berarti skrip shell Bourne / POSIX. Ini disebabkan oleh keberadaan cangkang keluarga Bourne. Untuk berbicara tentang skrip pada shell lain, Anda perlu memberikan kualifikasi, seperti "skrip shell C." Bahkan pada sistem di mana shell keluarga C adalah shell interaktif default, lebih baik menggunakan shell Bourne untuk skrip.

Dikatakan bahwa ketika Wikipedia mengklasifikasikan shell Unix , mereka mengelompokkannya ke dalam shell Bourne yang kompatibel, shell yang kompatibel, dan "lainnya."

Diagram ini dapat membantu:

Kerang Unix: Bourne, Korn, POSIX, C, dan rc Shell Families

(Klik untuk versi SVG, 31 kB, atau lihat versi PNG ukuran penuh , 218 kB.)

Apa artinya menjadi "tidak kompatibel"?

Seseorang berbicara tentang shhal yang tidak kompatibel biasanya berarti satu dari tiga hal:

  1. Mereka merujuk pada salah satu dari kerang "lain" tersebut .⁹

  2. Mereka membuat perbedaan antara keluarga shell Bourne dan C.

  3. Mereka berbicara tentang beberapa fitur khusus dalam satu shell keluarga Bourne yang tidak ada pada semua shell keluarga Bourne lainnya. ksh93,, bashdan zshkhususnya memiliki banyak fitur yang tidak ada di shell "standar" yang lebih lama. Ketiganya juga saling tidak kompatibel dalam banyak hal, setelah Anda melampaui POSIX / ksh88base bersama.

Ini adalah kesalahan klasik untuk menulis skrip shell dengan #!/bin/sh garis shebang di bagian atas tetapi menggunakan ekstensi shell Bash atau Korn di dalamnya. Karena /bin/shmerupakan salah satu shell dalam diagram keluarga Korn / POSIX di atas pada banyak sistem sekarang ini, skrip seperti itu akan bekerja pada sistem yang mereka tulis, tetapi kemudian gagal pada sistem di mana /bin/shada sesuatu dari keluarga shell kerang Bourne yang lebih luas. Praktik terbaik adalah dengan menggunakan #!/bin/bashatau #!/bin/kshbaris shebang jika skrip menggunakan ekstensi tersebut.

Ada banyak cara untuk memeriksa apakah skrip shell Bourne yang diberikan itu portabel:

  • Jalankan checkbashismsdi atasnya, alat dari proyek Debian yang memeriksa skrip untuk " bashisms ."

  • Jalankan di bawah posh, shell di repositori paket Debian yang sengaja mengimplementasikan hanya fitur yang ditentukan oleh SUS3 , ditambah beberapa fitur kecil lainnya .

  • Jalankan di bawah oshdari proyek Schily Tools , versi perbaikan dari shell Bourne yang bersumber terbuka dari Sun sebagai bagian dari OpenSolaris pada tahun 2005, menjadikannya salah satu cara termudah untuk mendapatkan shell Bourne gaya 1979 pada komputer modern.

    Distribusi Schily Tools juga mencakup bosh, shell tipe POSIX dengan banyak fitur tidak standar , tetapi yang mungkin berguna untuk menguji kompatibilitas skrip shell yang dimaksudkan untuk dijalankan pada semua shell keluarga POSIX. Ini cenderung lebih konservatif dalam set fitur daripada bash, zshdan versi yang disempurnakan dari ksh93.

    Schily Tools juga termasuk shell yang disebut bsh, tetapi itu adalah keanehan historis yang sama sekali bukan shell keluarga Bourne.

  • Pergi melalui Portabel Shell Programming bab dalam panduan GNU autoconf . Anda mungkin mengenali beberapa konstruk bermasalah yang dibicarakannya dalam skrip Anda.

Mengapa mereka berbeda?

Untuk alasan yang sama semua "Baru & Ditingkatkan!" segalanya berbeda:

  • Versi yang ditingkatkan hanya dapat ditingkatkan dengan memutus kompatibilitas ke belakang.

  • Seseorang memikirkan cara berbeda untuk sesuatu bekerja, yang mereka sukai lebih baik, tetapi yang tidak sama dengan cara kerja yang lama.

  • Seseorang mencoba menerapkan kembali standar lama tanpa sepenuhnya memahaminya, sehingga mereka mengacaukan dan menciptakan perbedaan yang tidak disengaja.


Catatan Kaki dan Asid :

  1. Versi awal BSD Unix hanyalah koleksi perangkat lunak tambahan untuk V6 Unix. Karena shell Bourne tidak ditambahkan ke AT&T Unix hingga V7, BSD secara teknis tidak memulai memiliki shell Bourne. Jawaban BSD untuk sifat primitif dari shell Thompson adalah C shell .

    Namun demikian, versi standalone pertama BSD (2.9BSD dan 3BSD) didasarkan pada V7 atau penggantinya portabel UNIX / 32V , sehingga mereka melakukan termasuk shell Bourne.

    (Garis 2BSD berubah menjadi garpu paralel BSD untuk minikomputer PDP Digital , sedangkan jalur 3BSD dan 4BSD melanjutkan untuk mengambil keuntungan dari jenis komputer yang lebih baru seperti Vaxen dan Unix workstation . 2.9BSD pada dasarnya adalah versi PDP dari 4.1cBSD; mereka adalah kontemporer, dan kode bersama . PDPs tidak hilang begitu saja ketika VAX tiba, sehingga garis 2BSD ini masih terhuyung-huyung sepanjang .)

    Aman untuk mengatakan bahwa kulit Bourne ada di mana-mana di dunia Unix pada tahun 1983. Itu perkiraan yang baik untuk "selamanya" di industri komputasi. MS-DOS memiliki sistem file hierarkis tahun itu (awww, how cuuute!) Dan Macintosh 24-bit pertama dengan layar B&W 9 "- bukan grayscale, secara harfiah hitam dan putih - tidak akan keluar hingga awal tahun berikutnya.

  2. Kerang Thompson cukup primitif menurut standar saat ini. Itu hanya shell perintah interaktif, daripada lingkungan pemrograman skrip yang kita harapkan hari ini. Itu memang memiliki hal-hal seperti pipa dan I / O redirection, yang kami anggap sebagai bagian prototipe dari "shell Unix," sehingga kami berpikir tentang shell perintah MS-DOS yang mendapatkannya dari Unix.

    Cangkang Bourne juga menggantikan cangkang PWB , yang menambahkan hal-hal penting ke cangkang Thompson seperti programabilitas ( if, switchdan while) dan bentuk awal dari variabel lingkungan. Shell PWB bahkan kurang diingat daripada shell Thompson karena itu bukan bagian dari setiap versi Unix.

  3. Ketika seseorang tidak spesifik tentang kompatibilitas shell POSIX vs Bourne, ada banyak hal yang bisa mereka maksudkan.

    Pada satu ekstrim, mereka bisa menggunakan shell Bourne 1979 sebagai dasar mereka. Sebuah " sh-yang kompatibel script" dalam pengertian ini berarti diharapkan untuk berjalan dengan sempurna pada shell Bourne benar atau salah penerus dan klon: ash, bash, ksh, zsh, dll

    Seseorang di ekstrem yang lain menganggap shell yang ditentukan oleh POSIX sebagai baseline. Kami mengambil begitu banyak fitur shell POSIX sebagai "standar" hari ini sehingga kami sering lupa bahwa mereka tidak benar-benar hadir dalam shell Bourne: built-in aritmatika, kontrol pekerjaan, riwayat perintah, alias, pengeditan baris perintah, $()bentuk perintah substitusi, dll.

  4. Meskipun shell Korn berakar kembali ke awal 1980-an, AT&T tidak mengirimkannya di Unix hingga System V Release 4 pada tahun 1988. Karena begitu banyak Unix komersial didasarkan pada SVR4, ini memasukkan kshhampir semua iklan Unix yang relevan dari akhir 1980-an dan seterusnya.

    (Beberapa rasa Unix yang aneh berdasarkan pada SVR3 dan sebelumnya memegang potongan pasar melewati rilis SVR4, tetapi mereka adalah yang pertama melawan tembok ketika revolusi datang.)

    1988 juga merupakan tahun standar POSIX pertama keluar, dengan shell Korn berbasis "POSIX shell." Kemudian, pada tahun 1993, versi yang lebih baik dari shell Korn keluar. Karena POSIX secara efektif memaku yang asli di tempat, kshbercabang menjadi dua versi utama: ksh88dan ksh93, dinamai setelah bertahun-tahun terlibat dalam perpecahan mereka.

    ksh88tidak sepenuhnya kompatibel dengan POSIX, meskipun perbedaannya kecil, sehingga beberapa versi ksh88shell ditambal agar kompatibel dengan POSIX. (Ini dari wawancara yang menarik tentang Slashdot dengan Dr. David G. Korn . Ya, pria yang menulis shell.)

    ksh93adalah superset yang sepenuhnya kompatibel dari shell POSIX . Pengembangan ksh93telah sporadis sejak repositori sumber utama pindah dari AT&T ke GitHub dengan rilis terbaru sekitar 3 tahun saat saya menulis ini, ksh93v. (Nama dasar proyek tetap ksh93dengan akhiran yang ditambahkan untuk menunjukkan versi rilis di luar tahun 1993.)

    Sistem yang menyertakan cangkang Korn sebagai hal yang terpisah dari cangkang POSIX biasanya menjadikannya tersedia /bin/ksh, meskipun terkadang bersembunyi di tempat lain.

    Ketika kita berbicara tentang kshatau shell Korn dengan nama, kita berbicara tentang ksh93fitur yang membedakannya dari subset shell Bourne dan POSIX yang kompatibel ke belakang. Anda jarang menemukan yang murni ksh88hari ini.

  5. AT&T menyimpan kode sumber shell milik Korn hingga Maret 2000 . Pada saat itu, hubungan Linux dengan GNU Bash sangat kuat. Bash dan ksh93 masing-masing memiliki kelebihan di atas yang lain , tetapi pada saat ini kelembaman membuat Linux terkait erat dengan Bash.

    Mengapa vendor Linux awal yang paling sering memilih GNU Bash lebih pdksh, yang adalah tersedia pada saat Linux memulai, aku rasa itu karena begitu banyak sisa userland juga datang dari proyek GNU . Bash juga agak lebih maju daripada pdksh, karena pengembang Bash tidak membatasi diri untuk menyalin fitur shell Korn.

    Pekerjaan pdkshberhenti ketika AT&T merilis kode sumber ke shell Korn yang sebenarnya. Ada dua garpu utama yang masih dipertahankan, yaitu: OpenBSD pdkshdan MirBSD Korn Shellmksh ,.

    Saya merasa menarik bahwa mkshadalah satu-satunya implementasi shell Korn yang saat ini dikemas untuk Cygwin.

  6. GNU Bash melampaui POSIX dalam banyak hal, tetapi Anda dapat memintanya untuk berjalan dalam mode POSIX yang lebih murni .

  7. csh/ tcshBiasanya default shell interaktif BSD Unix melalui awal 1990-an.

    Menjadi varian BSD , versi awal Mac OS X adalah cara ini, melalui Mac OS X 10.2 "Jaguar" . OS X mengalihkan shell default dari tcshke Bash di OS X 10.3 "Panther" . Perubahan ini tidak memengaruhi sistem yang ditingkatkan dari 10.2 atau sebelumnya. Pengguna yang ada pada sistem yang dikonversi menyimpan tcshcangkang mereka .

    FreeBSD mengklaim masih menggunakan tcshshell default , tetapi pada FreeBSD 10 VM yang saya miliki di sini, shell default tampaknya menjadi salah satu varian shell Almquist yang kompatibel dengan POSIX . Ini juga berlaku di NetBSD.

    OpenBSD menggunakan garpu pdkshsebagai shell default sebagai gantinya.

    Semakin populernya Linux dan OS X membuat beberapa orang berharap FreeBSD juga akan beralih ke Bash, tetapi mereka tidak akan melakukannya dalam waktu dekat karena alasan filosofis . Hal ini mudah untuk beralih , jika ini mengganggu Anda.

  8. Sangat jarang menemukan sistem dengan cangkang Bourne vanilla yang benar-benar seperti saat /bin/shini. Anda harus keluar dari cara Anda untuk menemukan sesuatu yang cukup dekat untuk pengujian kompatibilitas.

    Saya mengetahui hanya satu cara untuk menjalankan shell Bourne vintage tahun 1979 yang asli pada komputer modern: gunakan gambar disk Ancient Unix V7 dengan simulator SIMH PDP-11 dari Computer History Simulation Project . SIMH berjalan di hampir setiap komputer modern , bukan hanya yang mirip Unix. SIMH bahkan berjalan di Android dan iOS .

    Dengan OpenSolaris , Sun membuka versi SVR4 shell Bourne untuk pertama kalinya. Sebelum itu, kode sumber untuk versi post-V7 dari shell Bourne hanya tersedia bagi mereka yang memiliki lisensi kode sumber Unix.

    Kode itu sekarang tersedia secara terpisah dari sisa proyek OpenSolaris yang sudah tidak beroperasi dari beberapa sumber yang berbeda.

    Sumber paling langsung adalah proyek shell Heirloom Bourne . Ini menjadi tersedia segera setelah rilis OpenSolaris asli tahun 2005. Beberapa pekerjaan portabilitas dan perbaikan bug dilakukan selama beberapa bulan ke depan, tetapi kemudian pengembangan proyek terhenti.

    Jörg Schilling telah melakukan pekerjaan yang lebih baik dalam mempertahankan versi kode ini seperti oshdalam paket Schily Tools-nya . Lihat di atas untuk informasi lebih lanjut tentang ini.

    Perlu diingat bahwa shell ini berasal dari rilis kode sumber 2005 berisi dukungan set karakter multi-byte , kontrol pekerjaan, fungsi shell , dan fitur lainnya yang tidak ada dalam shell Bourne 1979 yang asli.

    Salah satu cara untuk mengetahui apakah Anda menggunakan shell Bourne asli adalah untuk melihat apakah ia mendukung fitur tidak berdokumen yang ditambahkan untuk memudahkan transisi dari shell Thompson: ^sebagai alias untuk |. Dengan kata lain, perintah like ls ^ moreakan memberikan kesalahan pada shell tipe Korn atau POSIX, tetapi akan berperilaku seperti ls | morepada shell Bourne yang benar.

  9. Kadang-kadang Anda menemukan fish, scshatau rc/espatuh, tetapi mereka bahkan lebih jarang daripada penggemar shell C.

    The rckeluarga kerang tidak umum digunakan pada sistem Unix / Linux, tapi keluarga secara historis penting, yang adalah bagaimana mendapatkan tempat dalam diagram di atas. rcadalah shell standar Plan 9 dari sistem operasi Bell Labs , sejenis penerus Unix edisi 10 , yang dibuat sebagai bagian dari penelitian lanjutan Bell Labs mengenai desain sistem operasi. Ini tidak kompatibel dengan cangkang Bourne dan C pada tingkat pemrograman; mungkin ada pelajaran di sana.

    Varian yang paling aktif rcadalah yang dipelihara oleh Toby Goodwin , yang didasarkan pada rcklon Unix oleh Byron Rakitzis.

Warren Young
sumber
Jika Anda ingin mengetahui lebih banyak hubungan, mis. Dengan "perintah", "bsh", dan Bourne Shell baru-baru ini, kirimkan saya catatan. Sebagai petunjuk: perintah UNOS memiliki perintah builtin "do" yang bertindak sebagai skrip shell satu baris dengan argumen. Gagasan ini ditransfer ke Bourne Shell sebagai "dosh" dan memungkinkan alias dengan parameterable, sesuatu yang tidak bisa Anda dapatkan dari ksh atau bash.
schily
Mungkin perlu dicatat bahwa pdksh itu sendiri didasarkan pada shell Forsyth. Sebagian besar dilupakan hari ini tetapi memang memiliki beberapa signifikansi historis dalam warisan pdksh tetapi juga karena itu adalah shell dari beberapa versi minix dan telah porting ke msdos.
Stéphane Chazelas
25

"sh kompatibel" mengacu pada POSIXsh , shell dasar yang diperlukan untuk ada pada semua sistem yang kompatibel. Skrip yang kompatibel dengan sh harus bekerja pada mesin apa pun yang kompatibel dengan POSIX.

Alasan itu perlu untuk mengatakan begitu adalah yang umum /bin/shadalah sebuah symlink ke /bin/bash, yang telah membiarkan beberapa Bashisms tergelincir ke dalam script yang menyatakan diri untuk menggunakan shdengan #!/bin/sh. Skrip ini gagal berfungsi pada sistem yang tidak digunakan bashsebagai /bin/sh, termasuk beberapa Unite komersial selamanya, dan Debian dan turunannya baru-baru ini.

Secara khusus sudah ada tren untuk digunakan dash, Debian Almquish Shell, sebagai standar shakhir-akhir ini, karena lebih kecil dan dimaksudkan untuk menjadi lebih cepat. Tren itu telah menyoroti banyak Bashisme yang ada dalam shskrip yang seharusnya . Menggambarkan sesuatu sebagai "kompatibel dengan sh" menunjukkan bahwa itu secara eksplisit dimaksudkan untuk bekerja dengan sistem ini dengan tetap sepenuhnya dalam bahasa yang ditentukan POSIX - semua shell akan mengimplementasikan superset dari fungsionalitas itu, jadi itu dijamin untuk bekerja di mana-mana, tetapi ekstensi mereka tidak bekerja kompatibel satu sama lain.

Kerang yang berbeda memiliki sejarah pengembangannya sendiri dan menyimpang ke arah yang berbeda dari waktu ke waktu, karena mereka menambahkan fungsi untuk membantu penggunaan interaktif bagi pengguna mereka, atau ekstensi skrip seperti array asosiatif. Skrip "tidak kompatibel" akan menggunakan beberapa fitur ekstensi non-standar ini, seperti [[persyaratan Bash .

Fitur-fitur non-POSIX di bashdan tcshdan zshdan semua shell saat ini berguna , dan ada banyak kesempatan di mana Anda mungkin ingin atau membutuhkannya. Mereka seharusnya tidak digunakan dalam skrip yang menyatakan dirinya dapat digunakan /bin/sh, karena Anda tidak dapat mengandalkan fitur-fitur yang berada dalam shimplementasi dasar pada sistem yang Anda jalankan.

Skrip yang memang perlu menggunakan, katakanlah, array asosiatif, harus memastikan dijalankan dengan bashalih - alih sh:

#!/bin/bash
declare -A array

Itu akan bekerja di mana saja dengan bash. Skrip yang tidak memerlukan fungsionalitas yang diperluas dan dimaksudkan untuk portabel harus menyatakan bahwa mereka menggunakan shdan tetap menggunakan bahasa perintah shell dasar.

Michael Homer
sumber