Kabuk işlevleri, komutları isimli bir grup altında toplayıp gerektiğinde
basit bir komut olarak grubu ismiyle çağırarak içindeki komutların
çalıştırılmasını sağlar. Kabuk işlevleri için bir altkabuk ya da yeni
bir süreç oluşturulmaz, içindeki komutlar doğrudan mevcut kabukta
yorumlanır.
İşlevler için aşağıdaki sözdizimi uygulanır:
[ function ] isim () birleşik-komut [ yönlendirmeler ]
Bu,
isim isminde bir kabuk işlevi oluşturur.
function anahtar sözcüğü isteğe bağlıdır.
function kullanılmışsa parantezler isteğe bağlıdır.
birleşik-komut işlevin gövdesini oluşturur (bkz,
Birleşik Komutlar). Bu komut normal olarak
{ ile
}
arasındaki bir
komut-listesinden oluşur, fakat evvelce açıklanan birleşik komutlardan biri olabilir.
isim bir komut ismi olarak verildiğinde
birleşik-komut çalıştırılır. İşlev çalıştırılırken işlevle ilişkilendirilmiş
yönlendirmeler de uygulanır.
Bir işlev tanımı
unset yerleşiğinin
-f seçeneğinde kullanılarak silinebilir (bkz,
unset Yerleşiği).
İşlev tanımının dönüş durumu bir sözdizimi hatası veya aynı isimde bir işlev olmadıkça sıfırdır. İşlev çalıştırıldığında, işlevin dönüş durumu gövdesindeki komutlardan sonuncusunun dönüş durumu olur.
Tarihsel sebeplerle, kaşlı ayraçlar anahtar sözcük olduklarından dolayı
kaşlı ayraç olarak işlenebilmeleri için diğer sözcüklerden
boşluklarla ya da satırsonu karakterleri ile ayrılmaları gerekir. Ayrıca, kaşlı ayraç kullanımında,
komut-listesi bir noktalı virgül, bir & ya da bir
satırsonu karakteri ile sonlandırılmalıdır.
Bir işlev çalıştırılırken, argümanları
Konumsal Parametreler olarak işlenir.
Özel parametre olan
# kullanılarak konumsal
parametrenin konumu değiştirilebilir. Ancak, 0. konumsal parametre
değiştirilemez. İşlevin çalıştırılması sırasında işlevin ismi
FUNCNAME değişkeninin ilk elemanında tutulur.
declare yerleşiği kullanılarak işlevin
trace özelliği belirtilmedikçe veya
set yerleşiği ile
-o functrace seçeneği etkinleştirilmedikçe
DEBUG ve
RETURN tuzaklarının miras alınması dışında komut çalıştırma ortamının tüm diğer yönleri bir işlev ile çağrıcısı arasında aynıdır. Ayrıca
trap Yerleşiği'ne de bakınız.
Eğer komut listesinde return yerleşik komutu varsa,
işlev tamamlandıktan sonra icra işlev çağrısından sonraki komuta geçerek
devam eder. RETURN tuzağı ile ilişkilendirilmiş bir komut icra kaldığı yerden devam etmeden önce çalıştırılır. İşlev tamamlandığında, konumsal parametrelerin ve
# özel parametresinin değerleri işlev çağrısından
önceki değerlerine döndürülür. return ile birlikte
bir sayı verilmişse, bu işlevin dönüş durumudur; verilmemişse
return komutundan önceki son çalıştırılan komutun
çıkış durumu işlevin dönüş durumudur.
İşleve özel değişkenler local yerleşiği ile
belirtilebilir. Bu değişkenler sadece işlev ve onun komut listesindeki
komutlar için geçerlidir.
İşlev isimleri ve tanımları
declare veya
typeset yerleşik komutlarının
-f seçeneği ile listelenebilir.
declare veya
typeset komutunun
-F seçeneği sadece işlev isimlerini listeleyecektir (eğer
extdebug kabuk seçeneği etkinse isteğe bağlı olarak kaynak dosyası ismi ve satır numarasını da). Bu yolla işlevler,
export yerleşiğine
-f seçeneği belirtilerek altkabuklara otomatik olarak ihraç edilebilir.
Aynı isimli kabuk işlevleri ve değişkenleri kabuğun çocuklarına çok sayıda eşdeğer isimli girdinin ortam içinde aktarılmasına sebep olacağına dikkat ediniz. Bunun sorunlara yol açabileceği durumları dikkate alınız.
İşlevler bir diğerinin içinden çağrılabilir. Bu şekilde iç içe
çağrılara bir sınırlama getirilmemiştir.