Değişkenler ve işlevler tire içinde farklı ad alanlarında bulunur ve bu POSIX tarafından da belirtilir :
Uygulama, işlevler ve değişkenler için ayrı ad boşlukları bulundurmalıdır.
Buna ek olarak, değişkenlerin varsayılan olarak genel kapsamı vardır. Bazı kabuklar (örn. Bash, ksh ve zsh), local
anahtar kelimeyi yalnızca yerel kapsamı olan bir işlevde değişkenleri bildirmek için sağlar.
Evet, gördüğünüz davranış POSIX tarafından garanti edilmektedir.
POSIX henüz standardize local
, henüz :
Erken bir teklifteki işlevlerin tanımı, işlevlerin minyatür kabuk komut dosyaları gibi davranması gerektiği fikrine dayanıyordu; yani, değişkenleri paylaşmak dışında , bir yürütme ortamının çoğu öğesi yeni bir yürütme ortamıymış gibi davranmalıdır, [..]
[..] Bir işlev içindeki yerel değişkenler dikkate alındı ve başka bir erken teklife dahil edildi (özel yerleşik tarafından kontrol edildi local
), ancak işlevler için geliştirilen basit modele uymadıkları ve henüz eklemeye bazı karşıtlıklar olduğu için kaldırıldı tarihsel pratiğin bir parçası olmayan yeni bir özel yerleşik. Bu yerel değişken mekanizmanın bu standardın gelecekteki bir versiyonunda benimsenmesi durumunda uygulamalar tanımlayıcıyı ayırmalıdır local
( typeset
KornShell'de kullanıldığı gibi).
(benimkini vurgula)
fn
işlevin ayrı bir ad alanında olduğunu kanıtlamaz ; bir kez yürütmek tanımını ortadan kaldırsaydı, tam olarak aynı davranışı görürdük. Fonksiyonun hala tanımlanmış olduğunu göstermelisiniz, örneğintype fn
daha sonra.