Variabel dan fungsi berada di ruang nama yang berbeda di dasbor dan ini juga ditentukan oleh POSIX :
Implementasi harus memelihara ruang nama yang terpisah untuk fungsi dan variabel.
Selain itu, secara default variabel memiliki cakupan global. Beberapa shell (mis. Bash, ksh dan zsh) menyediakan local
kata kunci untuk mendeklarasikan variabel dalam suatu fungsi dengan cakupan lokal saja.
Jadi, ya, perilaku yang Anda lihat dijamin oleh POSIX.
POSIX belum distandarisasi local
, namun :
Deskripsi fungsi dalam proposal awal didasarkan pada gagasan bahwa fungsi harus berperilaku seperti skrip shell miniatur; yaitu, kecuali untuk variabel berbagi , sebagian besar elemen dari lingkungan eksekusi harus berperilaku seolah-olah mereka adalah lingkungan eksekusi baru, [..]
[..] Variabel lokal dalam suatu fungsi dipertimbangkan dan dimasukkan dalam proposal awal lain (dikontrol oleh built-in khusus local
), tetapi dihapus karena tidak sesuai dengan model sederhana yang dikembangkan untuk fungsi dan karena ada beberapa oposisi untuk menambahkan built-in khusus baru yang bukan bagian dari praktik sejarah. Implementasi harus mencadangkan pengidentifikasi local
(dan juga typeset
, seperti yang digunakan dalam KornShell) jika mekanisme variabel lokal ini diadopsi dalam versi standar yang akan datang.
(penekanan milikku)
fn
fungsi tersebut berada dalam ruang nama yang terpisah; jika mengeksekusi sekali menghapus definisi, kita akan melihat perilaku yang sama persis. Anda harus menunjukkan bahwa fungsi masih didefinisikan, misalnya dengantype fn
sesudahnya.