Terkait: Interpreter shell mana yang menjalankan skrip tanpa shebang?
Script tidak memiliki shebang / hashbang / #!line, hanya karena dash ganda tidak #!.
Namun, skrip akan dieksekusi oleh shell (lihat pertanyaan dan jawaban terkait di atas), dan di shell itu, jika -karakter yang valid dalam nama fungsi, baris menyatakan fungsi shell yang disebut --tidak melakukan apa-apa (yah, itu berjalan :, yang tidak melakukan apa-apa ) dan yang tidak pernah disebut.
Fungsinya, dalam notasi multi-garis yang lebih umum (hanya untuk membuatnya lebih jelas seperti apa, karena namanya yang aneh agak mengaburkan fakta bahwa itu sebenarnya sebuah fungsi):
-- () {
:
}
Satu-satunya tujuan dari definisi fungsi adalah untuk memiliki garis yang valid dalam skrip shell dan pada saat yang sama perintah SQL yang valid (komentar). Kode semacam ini disebut polyglot .
Setelah mendeklarasikan fungsi shell palsu, skrip, ketika dijalankan oleh penerjemah skrip shell, digunakan execuntuk mengganti shell saat ini dengan proses yang dihasilkan dari menjalankan db2 -txf "$0", yang akan sama dengan menggunakan db2 -txfpathname dari skrip dari baris perintah.
Trik ini mungkin tidak akan berfungsi dengan baik pada sistem di mana dashatau ashshell berbasis lainnya yash,, Bourne shell, ksh88atau ksh93digunakan sebagai /bin/sh, karena shell ini tidak menerima fungsi yang namanya berisi tanda hubung.
Juga terkait:
Saya kira yang berikut ini juga akan berfungsi (tidak benar-benar diuji):
--() { exec db2 -txf "$0"; }; --