Saya menemukan skrip Bash hari ini yang memiliki nama fungsi dengan titik dua ::
di dalamnya, misalnya, file::write()
dan file::read()
. Saya belum pernah melihat sintaks ini sebelumnya dalam skrip Bash, dan ketika saya mengaktifkan skrip itu berjalan dengan baik (mengejutkan saya).
Setelah menjelajahi halaman manual Bash di sistem saya (dan online), saya tidak dapat menemukan apa pun dalam dokumentasi yang mendukung sintaks ini untuk nama fungsi. Sebagai contoh, bagian ini Shell Defined Functions
mendefinisikan sintaks untuk fungsi shell menjadi
function name [()] compound-command [redirection]
dan kemudian (di tempat lain dalam manual) token name
didefinisikan sebagai
name A word consisting only of alphanumeric characters and
underscores, and beginning with an alphabetic character
or an underscore. Also referred to as an identifier.
Tidak ada sebutan sintaks kolon ganda untuk nama fungsi.
Satu-satunya referensi lain untuk sintaks kolon ganda ini yang saya temukan sejauh ini adalah dalam Panduan Gaya Shell ini (lihat subbagian Naming Conventions > Function Names
) yang merekomendasikan penggunaan sintaks kolon ganda untuk nama-nama fungsi dalam "paket" - misalnya mypackage::myfunction()
,.
Apakah sintaks kolon ganda ini untuk nama fungsi fitur yang sah dari shell Bash, atau mungkin ini fitur yang tidak didokumentasikan? Jika itu sah, di mana itu didokumentasikan dalam manual Bash? Saya telah melihat dan mencari tetapi saya tidak dapat menemukan apa pun tentang itu di manual. Yang paling dekat saya temukan adalah penggunaan ::
dalam PATH
variabel lingkungan untuk menambahkan direktori kerja saat ini ke jalur pencarian.
CONTOH
#!/bin/bash
function abc::def() {
echo "${FUNCNAME[0]}"
}
abc::def
Saya menguji skrip ini pada tiga distro Linux yang berbeda, dan pada ketiga skrip tersebut mencetak abc::def
ke stdout.
%%
dalam nama fungsi unix.stackexchange.com/questions/401166/…