← man/shells_and_env
ksh — man ksh — 80×24
ugur@toprak:~/man/shells_and_env$man ksh
Bölüm 1 Kabuklar & Ortam

ksh

ksh — macOS komut satırı aracı.

İsim

ksh, rksh, pfksh - KornShell, standart/kısıtlı bir komut ve programlama dili

Not

Şu anda rksh ve pfksh, Mac OS X / Darwin üzerinde mevcut değildir.

Özet

       ksh [ ±abcefhikmnoprstuvxBCDP ] [ -R dosya ] [ ±o seçenek ] ... [ - ] [ arg ... ]
       rksh [ ±abcefhikmnoprstuvxBCD ] [ -R dosya ] [ ±o seçenek ] ...  [ - ] [ arg ... ]

Açıklama

Ksh, bir terminal veya dosyadan okunan komutları yürüten bir komut ve programlama dilidir. Rksh, ksh komut yorumlayıcısının kısıtlı bir sürümüdür; yetenekleri standart kabuğunkilere göre daha fazla kontrol altında olan oturum açma adları ve yürütme ortamları kurmak için kullanılır. Rpfksh, ksh komut yorumlayıcısının bir profil kabuğu sürümüdür; kullanıcının profilleri tarafından belirtilen özniteliklerle komutları yürütmek için kullanılır (bkz. pfexec(1)). Kabuk bağımsız değişkenlerinin anlamı için aşağıdaki Başlatma bölümüne bakın.

Tanımlar. Bir metakarakter (metacharacter), aşağıdaki karakterlerden biridir:

; & ( ) ⎪ < > yeni-satır boşluk tab

Boşluk (blank), bir tab veya boşluk (space) karakteridir. Tanımlayıcı (identifier), harf veya alt çizgi ile başlayan harfler, rakamlar veya alt çizgilerden oluşan bir dizidir. Tanımlayıcılar, değişken adlarının bileşenleri olarak kullanılır. Bir vname, aralarına . konarak ayrılmış bir veya daha fazla tanımlayıcı dizisidir ve isteğe bağlı olarak başında .. bulunabilir. Vname'ler, işlev ve değişken adları olarak kullanılır. Bir sözcük (word), tırnak içine alınmamış metakarakterler hariç olmak üzere, geçerli yerel ayar (locale) tarafından tanımlanan karakter kümesindeki karakterlerin bir dizisidir.

Bir komut, kabuk dilinin sözdizimindeki bir karakter dizisidir. Kabuk, her komutu okur ve istenen eylemi doğrudan veya ayrı yardımcı programları çağırarak gerçekleştirir. Yerleşik (built-in) bir komut, ayrı bir süreç oluşturulmadan kabuğun kendisi tarafından yürütülen bir komuttur. Bazı komutlar tamamen kolaylık sağlamak amacıyla yerleşiktir ve burada belgelenmemiştir. Kabuk ortamında yan etkilere neden olan yerleşikler ve bir yol araması yapılmadan önce bulunan yerleşikler (aşağıdaki Yürütme bölümüne bakın) burada belgelenmiştir. Tarihsel nedenlerden dolayı, bu yerleşiklerin bazıları diğer yerleşiklerden farklı davranır ve bunlara özel yerleşikler (special built-ins) denir.

Komutlar. Bir basit-komut (simple-command), değişken atamalarının bir listesi (aşağıdaki Değişken Atamaları bölümüne bakın) veya önünde bir değişken atamaları listesi bulunabilen, boşlukla ayrılmış bir sözcük dizisidir (aşağıdaki Ortam bölümüne bakın). İlk sözcük, yürütülecek komutun adını belirtir. Aşağıda belirtilenler dışında, kalan sözcükler çağrılan komuta bağımsız değişkenler olarak aktarılır. Komut adı, bağımsız değişken 0 olarak aktarılır (bkz. exec(2)). Bir basit komutun değeri, çıkış durumudur (exit status); normal şekilde sonlanırsa 0-255; anormal şekilde sonlanırsa 256+signum değerini alır (çıkış durumuna karşılık gelen sinyalin adı, yerleşik kill yardımcı programının -l seçeneği aracılığıyla elde edilebilir).

Bir boru hattı (pipeline), aralarında ⎪ bulunan bir veya daha fazla komutun dizisidir. Sonuncusu hariç her komutun standart çıktısı, bir pipe(2) ile bir sonraki komutun standart girdisine bağlanır. Muhtemelen sonuncusu hariç her komut, ayrı bir süreç olarak çalıştırılır; kabuk, son komutun sonlanmasını bekler. Bir boru hattının çıkış durumu, pipefail seçeneği etkinleştirilmediği sürece son komutun çıkış durumudur. Her boru hattının önüne rezerve edilmiş ! sözcüğü getirilebilir; bu sözcük, son komutun çıkış durumu sıfır dışı ise boru hattının çıkış durumunun 0 olmasını, son komutun çıkış durumu 0 ise 1 olmasını sağlar.

Bir liste, ;, &, ⎪&, && veya ⎪⎪ ile ayrılmış ve isteğe bağlı olarak ;, &, veya ⎪& ile sonlandırılmış bir veya daha fazla boru hattının dizisidir. Bu beş simgeden ;, &, ve ⎪&, && ve ⎪⎪ simgelerinden daha düşük olan eşit önceliğe sahiptir. && ve ⎪⎪ simgeleri de eşit önceliğe sahiptir. Noktalı virgül (;) önceki boru hattının ardışık olarak yürütülmesine neden olur; ampersand (&) önceki boru hattının eşzamansız (asenkron) olarak yürütülmesine neden olur (yani kabuk, o boru hattının bitmesini beklemez). ⎪& simgesi, ana kabuk ile kurulan iki yönlü bir boru hattıyla önceki boru hattının eşzamansız olarak yürütülmesine neden olur; oluşturulan boru hattının standart girdisi ve çıktısı, komutlara p bağımsız değişkeniyle <& ve >& yönlendirme operatörleri uygulanarak ve daha sonra açıklanan yerleşik read ve print komutlarının -p seçeneği kullanılarak ana kabuk tarafından yazılabilir ve okunabilir. && (⎪⎪) simgesi, kendisinden sonra gelen listenin yalnızca önceki boru hattı sıfır (sıfır dışı) bir değer döndürürse yürütülmesine neden olur. Bir komutu sınırlandırmak için bir listede noktalı virgül yerine bir veya daha fazla yeni satır bulunabilir. Bir listenin ilk boru hattının, yönlendirme ile başlamayan ve bir while, until veya if listesi içinde yer almayan basit bir komut olan ilk öğesinin önüne noktalı virgül getirilebilir. Aşağıda yerleşik set komutuyla açıklandığı gibi showme seçeneği etkinleştirilmediği sürece bu noktalı virgül yoksayılır.

Bir komut, ya bir basit-komuttur ya da aşağıdakilerden biridir. Aksi belirtilmedikçe, bir komut tarafından döndürülen değer, komutta yürütülen son basit-komutun değeridir.

for vname [ in word ... ] ;do list ;done Bir for komutu her yürütüldüğünde, vname, in word listesinden alınan bir sonraki sözcüğe ayarlanır. Eğer in word ... belirtilmezse, for komutu do listesini, 1'den başlayarak ayarlanan her bir konumsal parametre için bir kez yürütür (aşağıdaki Parametre Açılımı bölümüne bakın). Yürütme, listede başka sözcük kalmadığında sona erer.

for (( [expr1] ; [expr2] ; [expr3] )) ;do list ;done İlk olarak aritmetik ifade expr1 değerlendirilir (aşağıdaki Aritmetik Değerlendirme bölümüne bakın). Aritmetik ifade expr2, sıfır değerini alana kadar tekrar tekrar değerlendirilir; sıfır dışı olduğunda, list yürütülür ve aritmetik ifade expr3 değerlendirilir. Herhangi bir ifade belirtilmezse, 1 olarak değerlendirilmiş gibi davranır.

select vname [ in word ... ] ;do list ;done Bir select komutu, standart hataya (dosya tanımlayıcısı 2) her birinin önünde bir sayı bulunan sözcük kümesini yazdırır. in word ... belirtilmezse, bunun yerine 1'den başlayan konumsal parametreler kullanılır (aşağıdaki Parametre Açılımı bölümüne bakın). PS3 istemi (prompt) yazdırılır ve standart girdiden bir satır okunur. Eğer bu satır, listelenen sözcüklerden birinin sayısından oluşuyorsa, vname değişkeninin değeri bu sayıya karşılık gelen sözcüğe ayarlanır. Bu satır boşsa, seçim listesi yeniden yazdırılır. Aksi takdirde, vname değişkeninin değeri null (boş) olarak ayarlanır. Standart girdiden okunan satırın içeriği REPLY değişkenine kaydedilir. Liste, bir break (kesme) veya dosya sonu (end-of-file) ile karşılaşılana kadar her seçim için yürütülür. REPLY değişkeni, list'in yürütülmesiyle null olarak ayarlanırsa, bir sonraki seçim için PS3 istemi görüntülenmeden önce seçim listesi yazdırılır.

case word in [ [(]pattern [ ⎪ pattern ] ... ) list ;; ] ... esac Bir case komutu, word ile eşleşen ilk pattern ile ilişkili olan list'i yürütür. Desenlerin (pattern) biçimi, dosya adı oluşturma için kullanılanla aynıdır (aşağıdaki Dosya Adı Oluşturma bölümüne bakın). ;; operatörü, case yürütmesinin sonlanmasına neden olur. ;; yerine ;& kullanılırsa, varsa bir sonraki liste yürütülür.

if list ;then list [ ;elif list ;then list ] ... [ ;else list ] ;fi if'i takip eden list yürütülür ve eğer sıfır çıkış durumu döndürürse, ilk then'i takip eden list yürütülür. Aksi takdirde, elif'i takip eden list yürütülür ve değeri sıfırsa, bir sonraki then'i takip eden list yürütülür. Birbirini izleyen her elif listesi başarısız olursa, else listesi yürütülür. Eğer if listesinin çıkış durumu sıfır dışıysa ve else listesi yoksa, if komutu sıfır çıkış durumu döndürür.

while list ;do list ;done until list ;do list ;done Bir while komutu, while listesini tekrar tekrar yürütür ve listedeki son komutun çıkış durumu sıfırsa, do listesini yürütür; aksi takdirde döngü sonlanır. do listesinde hiçbir komut yürütülmezse, while komutu sıfır çıkış durumu döndürür; döngü sonlandırma testini tersine çevirmek için while yerine until kullanılabilir.

((expression)) İfade (expression), aşağıda açıklanan aritmetik değerlendirme kuralları kullanılarak değerlendirilir. Aritmetik ifadenin değeri sıfır dışı ise çıkış durumu 0, aksi takdirde çıkış durumu 1'dir.

(list) list'i ayrı bir ortamda yürütür. İç içe yerleştirme için yan yana iki açık parantez gerektiğinde, yukarıda açıklanan aritmetik komut olarak değerlendirilmesini önlemek için bir boşluk bırakılması gerektiğine dikkat edilmelidir.

{ list;} list basitçe yürütülür. ( ve ) metakarakterlerinin aksine, { ve } sözcüklerinin rezerve edilmiş sözcükler olduğuna ve tanınabilmeleri için bir satırın başında veya bir ; karakterinden sonra gelmeleri gerektiğine dikkat edilmelidir.

[[ expression ]] İfadeyi (expression) değerlendirir ve ifade doğru olduğunda sıfır çıkış durumu döndürür. İfadenin açıklaması için aşağıdaki Koşullu İfadeler bölümüne bakın.

function varname { list ;} varname () { list ;} varname tarafından başvurulan bir işlev (function) tanımlar. varname'i bir . içeren bir işlev, bir disiplin işlevi (discipline function) olarak adlandırılır ve varname'in son .'dan önceki kısmı mevcut bir değişkene atıfta bulunmalıdır. İşlevin gövdesi, { ve } arasındaki komutların listesidir. function varname sözdizimiyle tanımlanan bir işlev, sanki onu tanımlamak için varname() sözdizimi kullanılmış gibi eşdeğer davranışı elde etmek amacıyla özel yerleşik . komutuna bir bağımsız değişken olarak da kullanılabilir. (Aşağıdaki İşlevler bölümüne bakın.)

namespace identifier { list ;} identifier ad alanını (name space) tanımlar veya kullanır ve list içindeki komutları bu ad alanında çalıştırır. (Aşağıdaki Ad Alanları bölümüne bakın.)

& [ name [ arg... ] ] & ile sonlandırılan sonraki liste komutlarının background iş havuzu name içine yerleştirilmesine neden olur. name belirtilmezse varsayılan adlandırılmamış bir havuz kullanılır. Adlandırılmış bir arka plan havuzundaki komutlar uzaktan yürütülebilir.

time [ pipeline ] Eğer pipeline belirtilmezse, mevcut kabuk ve tamamlanan alt süreçler için kullanıcı ve sistem süresi standart hataya yazdırılır. Aksi takdirde, pipeline yürütülür ve geçen sürenin yanı sıra kullanıcı ve sistem süresi standart hataya yazdırılır. TIMEFORMAT değişkeni, zamanlama bilgilerinin nasıl görüntüleneceğini belirten bir biçim dizgesine ayarlanabilir. TIMEFORMAT değişkeninin açıklaması için aşağıdaki Kabuk Değişkenleri bölümüne bakın.

Aşağıdaki rezerve edilmiş sözcükler, yalnızca bir komutun ilk sözcüğü olduklarında ve tırnak içine alınmadıklarında rezerve edilmiş olarak tanınırlar:

if then else elif fi case esac for while until do done { } function select time [[ ]] !

Değişken Atamaları. Bir veya daha fazla değişken ataması basit bir komutu başlatabilir veya tür olarak oluşturulmuş diğer bildirim komutlarının yanı sıra typeset, enum, export veya readonly özel yerleşik komutlarına bağımsız değişken olabilir. Bir atamanın sözdizimi şu biçimdedir:

varname=word varname[word]=word varname ile = arasında veya = ile word arasında boşluk bırakılmasına izin verilmez.

varname=(assign_list) varname ile = arasında boşluk bırakılmasına izin verilmez. Atamadan önce varname değişkeninin tanımı kaldırılır (unset). Bir assign_list aşağıdakilerden biri olabilir: word ... Dizinli dizi (indexed array) ataması. [word]=word ... İlişkisel dizi (associative array) ataması. Önüne typeset -a getirilirse bunun yerine dizinli bir dizi oluşturulacaktır. assignment ... Bileşik değişken ataması. Bu, name kısmı atamanın adı olmak üzere, varname.name biçiminde alt değişkenlere sahip bileşik bir varname değişkeni oluşturur. varname değeri tüm atama öğelerini içerecektir. varname'in alt değişkenlerine yapılan ek atamalar da varname değerinin bir parçası olarak görüntülenecektir. Hiçbir atama belirtilmezse, varname sonraki alt öğelerin tanımlanmasına izin veren bileşik bir değişken olacaktır. typeset [seçenekler] assignment ... İç içe değişken ataması. Her biri bir ; ile ayrılarak birden fazla atama belirtilebilir. Atamadan önce önceki değer kaldırılır. typeset yerine readonly, enum gibi diğer bildirim komutları kullanılabilir. . filename filename içinde yer alan atama komutlarını dahil eder.

Ayrıca, önceki değere ekleme yapıldığını veya sona eklendiğini belirtmek için = yerine += kullanılabilir. Bir aritmetik türe += uygulandığında, word bir aritmetik ifade olarak değerlendirilir ve mevcut değere eklenir. Bir dizge (string) değişkenine uygulandığında, word tarafından tanımlanan değer mevcut değerin sonuna eklenir. Bileşik atamalar için, türlerin uyumlu olması koşuluyla önceki değer kaldırılmaz ve yeni değerler mevcut olanların sonuna eklenir.

Bir değişken atamasının sağ tarafı, sözcük bölme (word splitting), küme parantezi açılımı (brace expansion) ve dosya adı oluşturma (file name generation) hariç olmak üzere aşağıda listelenen tüm açılımlara tabi tutulur. Sol taraf bileşik bir değişken ataması olduğunda ve sağ taraf bileşik bir değişkenin adı olduğunda, sağdaki bileşik değişken soldaki bileşik değişkene kopyalanır veya sonuna eklenir.

Yorumlar. Harfi # ile başlayan bir sözcük, bu sözcüğün ve ardından gelen yeni bir satıra kadar olan tüm karakterlerin yoksayılmasına neden olur. Takma Ad Verme (Aliasing). Eğer bu sözcük için bir takma ad (alias) tanımlanmışsa, her komutun ilk sözcüğü takma adın metniyle değiştirilir. Bir takma ad adı; metakarakterler, tırnak içine alma karakterleri, dosya açılım karakterleri, parametre açılımı ve komut ikame karakterleri ile / ve = karakterleri hariç olmak üzere herhangi bir sayıda karakterden oluşur. Değiştirme dizgesi, yukarıda listelenen metakarakterler de dahil olmak üzere herhangi bir geçerli kabuk betiğini içerebilir. Değiştirilen metindeki her komutun ilk sözcüğü (değiştirilme sürecinde olanlar hariç), takma adlar için test edilecektir. Eğer takma ad değerinin son karakteri bir boşluksa, takma adı takip eden sözcük de takma ad ikamesi için kontrol edilecektir. Takma adlar, yerleşik komutları yeniden tanımlamak için kullanılabilir ancak yukarıda listelenen rezerve edilmiş sözcükleri yeniden tanımlamak için kullanılamaz. Takma adlar, alias komutuyla oluşturulabilir ve listelenebilir ve unalias komutuyla kaldırılabilir. Takma ad atama işlemi betikler okunduğunda gerçekleştirilir, yürütülürken değil. Bu nedenle, bir takma adın yürürlüğe girmesi için takma ad tanımlama komutunun, takma ada başvuran komut okunmadan önce yürütülmesi gerekir. Aşağıdaki takma adlar kabuğun içine derlenmiştir ancak kaldırılabilir veya yeniden tanımlanabilir: autoload=′typeset -fu′ command=′command ′ compound=′typeset -C′ fc=hist float=′typeset -lE′ functions=′typeset -f′ hash=′alias -t --′ history=′hist -l′ integer=′typeset -li′ nameref=′typeset -n′ nohup=′nohup ′ r=′hist -s′ redirect=′command exec′ source=′command .′ stop=′kill -s STOP′ suspend=′kill -s STOP $$′ times=′{ { time;} 2>&1;}′ type=′whence -v′

Tilde İkamesi (Tilde Substitution). Takma ad ikamesi gerçekleştirildikten sonra, her sözcük tırnak içine alınmamış bir ∼ ile başlayıp başlamadığını görmek için kontrol edilir. Tilde ikamesi için, word aynı zamanda parametre açılımının sözcük kısmını da ifade eder (aşağıdaki Parametre Açılımı bölümüne bakın). Eğer öyleyse, / karakterine kadar olan sözcük, parola veritabanındaki bir kullanıcı adıyla eşleşip eşleşmediğini görmek için kontrol edilir (Bkz. getpwname(3)). Eğer bir eşleşme bulunursa, ∼ ve eşleşen oturum açma adı, eşleşen kullanıcının oturum açma dizini ile değiştirilir. Eşleşme bulunamazsa orijinal metin değiştirilmeden bırakılır. Kendi başına veya bir / işaretinin önünde bulunan bir ∼, $HOME ile değiştirilir. Bir ∼ işaretinin ardından gelen + veya -, sırasıyla $PWD ve $OLDPWD değerleriyle değiştirilir.

Ek olarak, bir değişken atamasını açarken, atamanın değeri bir ∼ ile başladığında ve bir : işaretinden sonra bir ∼ göründüğünde tilde ikamesi denenir. : işareti aynı zamanda bir ∼ oturum açma adını sonlandırır.

Komut İkamesi (Command Substitution). Önünde dolar işareti bulunan parantez içindeki bir komut listesinden ( $(list) ) veya önünde dolar işareti bulunan bir küme parantezi grubundan ( ${ list;} ) ya da bir çift ters tırnak (``) içindeki standart çıktı, bir sözcüğün bir parçası veya tamamı olarak kullanılabilir; sondaki yeni satırlar kaldırılır. İkinci durumda, { ve } rezerve edilmiş sözcükler olarak değerlendirilir, böylece { karakterini bir boşluk takip etmeli ve } karakteri satırın başında görünmeli veya bir ; işaretini takip etmelidir. Üçüncü (kullanımdan kaldırılmış) biçimde, komut yürütülmeden önce tırnak işaretleri arasındaki dizge özel tırnak içine alma karakterleri için işlenir (aşağıdaki Tırnak İçine Alma bölümüne bakın). $(cat dosya) komut ikamesi, eşdeğeri olan ancak daha hızlı çalışan $(<dosya) ile değiştirilebilir. $(n<#) komut ikamesi, dosya tanımlayıcısı n için geçerli bayt kaydırma değerine (offset) açılacaktır. İkinci biçim hariç, komut listesi bir alt kabukta (subshell) çalıştırılır, böylece hiçbir yan etki oluşamaz. İkinci biçim için, sondaki } herhangi bir simgeden (token) sonra rezerve edilmiş bir sözcük olarak tanınacaktır.

Aritmetik İkame (Arithmetic Substitution). Önünde dolar işareti bulunan çift parantez içine alınmış bir aritmetik ifade ( $(()) ), çift parantez içindeki aritmetik ifadenin değeriyle değiştirilir.

Süreç İkamesi (Process Substitution). <(list) veya >(list) biçimindeki her komut bağımsız değişkeni, eğer bu dizin mevcutsa /dev/fd içindeki bir dosyaya, aksi takdirde geçici bir dizindeki bir fifo'ya asenkron (eşzamansız) olarak bağlanmış olan süreç list'ini çalıştıracaktır. Bu dosyanın adı komutun bağımsız değişkeni olacaktır. > işaretli biçim seçilirse, bu dosyaya yazmak list için girdi sağlayacaktır. Eğer < kullanılırsa, bağımsız değişken olarak aktarılan dosya list sürecinin çıktısını içerecektir. Örneğin,

paste <(cut -f1 file1) <(cut -f3 file2) | tee >(process1) >(process2)

dosya1 (file1) ve dosya2 (file2) dosyalarından sırasıyla 1. ve 3. alanları keser, sonuçları birbirine yapıştırır ve standart çıktıya vermesinin yanı sıra process1 ve process2 süreçlerine gönderir. Komuta bağımsız değişken olarak aktarılan dosyanın bir UNIX pipe(2) (boru hattı) olduğuna, bu nedenle dosya üzerinde lseek(2) yapmayı bekleyen programların çalışmayacağına dikkat edilmelidir.

<(list) biçimindeki süreç ikamesi, list çıktısının standart girdi veya belirtilen herhangi bir dosya tanımlayıcısı için girdi olmasını sağlayan < yönlendirme operatörüyle de kullanılabilir.

Parametre Açılımı (Parameter Expansion). Bir parametre; bir değişken, bir veya daha fazla rakam veya ∗, @, #, ?, -, $, ve ! karakterlerinden herhangi biridir. Bir değişken bir vname ile gösterilir. vname'i bir . içeren bir değişken oluşturmak için, vname'i son .'dan önceki her şeyden oluşan bir değişkenin zaten mevcut olması gerekir. Bir değişkenin bir değeri ve sıfır veya daha fazla özniteliği vardır. Değişkenlere, özel yerleşik typeset komutu kullanılarak değerler ve öznitelikler atanabilir. Kabuk tarafından desteklenen öznitelikler daha sonra özel yerleşik typeset komutu ile açıklanmaktadır. Dışa aktarılan (export) değişkenler, değerleri ve öznitelikleri ortama aktarır.

Kabuk hem dizinli (indexed) hem de ilişkisel (associative) dizileri destekler. Bir dizi değişkeninin bir öğesine alt simge (subscript) ile başvurulur. Bir dizinli dizi için alt simge, [ ve ] arasındaki bir aritmetik ifadeyle (aşağıdaki Aritmetik Değerlendirme bölümüne bakın) gösterilir. Dizinli bir diziye değerler atamak için vname=(value ...) veya set -A vname value ... kullanın. Negatif olmayan tüm alt simgelerin değeri 0 ile 4.194.303 aralığında olmalıdır. Negatif bir alt simge, geçerli en yüksek dizin +1'den bir kaydırma (offset) olarak değerlendirilir, böylece -1 son öğeye atıfta bulunur. Dizinli diziler, typeset komutunun -a seçeneği ile bildirilebilir. Dizinli dizilerin bildirilmesi zorunlu değildir. Geçerli bir alt simge ile bir değişkene yapılan herhangi bir başvuru yasaldır ve gerekirse bir dizi oluşturulacaktır.

İlişkisel bir dizi, typeset komutunun -A seçeneği ile oluşturulur. İlişkisel bir dizi için alt simge, [ ve ] arasına alınmış bir dizge (string) ile gösterilir.

Herhangi bir diziye alt simge olmadan başvurmak, diziye 0 alt simgesiyle başvurmakla eşdeğerdir.

Bir değişkenin değeri şu şekilde yazılarak atanabilir:

vname=value [ vname=value ] ...

veya vname[subscript]=value [ vname[subscript]=value ] ... = işaretinden önce veya sonra boşluk bırakılmasına izin verilmediğine dikkat edin. Özel yerleşik typeset komutu tarafından atanan öznitelikler dizinin tüm öğelerine uygulanır. Bir dizi öğesi basit bir değişken, bileşik bir değişken veya bir dizi değişkeni olabilir. Dizinli bir dizinin bir öğesi ya dizinli bir dizi ya da ilişkisel bir dizi olabilir. İlişkisel bir dizinin bir öğesi de bunlardan biri olabilir. Bir dizi öğesinin parçası olan başka bir dizi öğesine başvurmak için alt simgeleri köşeli parantezler içinde art arda yazın. Örneğin, dizinli dizinin üçüncü öğesi olarak tanımlanan ilişkisel dizinin foobar öğesine başvurmak için ${vname[3][foobar]} kullanın. Bir nameref, başka bir değişkene referans olan bir değişkendir. Bir nameref, typeset komutunun -n özniteliği ile oluşturulur. typeset komutu yürütüldüğü sıradaki değişkenin değeri, nameref değişkeni her kullanıldığında başvurulacak değişken haline gelir. Bir nameref'in adı bir . içeremez. Bir değişken veya işlev adı bir . içerdiğinde ve adın ilk .'ya kadar olan kısmı bir nameref adıyla eşleştiğinde, başvurulan değişken, nameref kısmı yerine nameref tarafından başvurulan değişkenin adı getirilerek elde edilir. Bir for döngünün dizini olarak bir nameref kullanılırsa, listedeki her bir öğe için bir ad referansı (name reference) oluşturulur. Bir nameref, adı bir işleve bağımsız değişken olarak aktarılan işlev içindeki değişkene başvurmak için uygun bir yol sağlar. Örneğin, bir değişkenin adı bir işleve ilk bağımsız değişken olarak aktarılırsa, işlevin içindeki typeset -n var=$1 komutu, var'a yapılan başvuruların ve atamaların, adı işleve aktarılan değişkene yapılan başvurular ve atamalar olmasını sağlar. vname için kayan noktalı sayı özniteliklerinden (-E, -F veya -X) veya tamsayı özniteliğinden (-i) herhangi biri ayarlanmışsa, değer aşağıda açıklandığı gibi aritmetik değerlendirmeye tabi tutulur. Sayılarla gösterilen konumsal parametrelere, özel yerleşik set komutuyla değerler atanabilir. Kabuk çağrıldığında parametre $0, sıfırıncı bağımsız değişkenden ayarlanır. $ karakteri, ikame edilebilir parametreleri tanıtmak için kullanılır. ${parameter} Kabuk, süslü parantezler veya metakarakterler içerse bile ${ işaretinden eşleşen } işaretine kadar olan tüm karakterleri aynı sözcüğün bir parçası olarak okur. Varsa, parametrenin değeri ikame edilir. parametrenin ardından, adının bir parçası olarak yorumlanmaması gereken bir harf, rakam veya alt çizgi geldiğinde ve değişken adı bir . içerdiğinde süslü parantezler gereklidir. Aritmetik İfade veya Koşullu İfadenin bir parçası olmadığı sürece, bir değişken alt simgeli olduğunda भी süslü parantezler gereklidir. Parametre bir veya daha fazla rakamdan oluşuyorsa konumsal bir parametredir. Birden fazla rakamdan oluşan konumsal bir parametre süslü parantez içine alınmalıdır. Parametre ∗ veya @ ise, $1'den başlayarak tüm konumsal parametreler (bir alan ayırıcı karakterle ayrılarak) ikame edilir. Son alt simgesi ∗ veya @ olan ya da sub1 .. sub2 biçimindeki dizin dizileri için bir vname dizisi kullanılıyorsa, sub1 ile sub2 (dahil) arasındaki öğelerin her birinin (veya ∗ ve @ için tüm öğelerin) değeri, IFS değerinin ilk karakteriyle ayrılarak ikame edilir. ${#parameter} Parametre ∗ veya @ ise, konumsal parametrelerin sayısı ikame edilir. Aksi takdirde, parametre değerinin uzunluğu ikame edilir. ${#vname[*]} ${#vname[@]} vname dizisindeki öğelerin sayısı ikame edilir.

${@vname} vname tarafından başvurulan değişkenin tür adına (aşağıdaki Tür Değişkenleri bölümüne bakın) veya özniteliklerine açılır. ${!vname} vname tarafından başvurulan değişkenin adına açılır. vname bir ad referansı (name reference) olmadığı sürece bu vname olacaktır. ${!vname[subscript]} subscript , @ veya sub1 .. sub2 biçiminde olmadığı sürece alt simgenin (subscript) adına açılır. subscript * olduğunda, vname için dizi alt simgelerinin listesi oluşturulur. Dizi olmayan bir değişken için, değişken ayarlanmışsa değer 0'dır. Aksi takdirde null'dur. subscript @ olduğunda, çift tırnak içinde kullanıldığında her bir dizi alt simgesinin ayrı bir bağımsız değişken üretmesi dışında yukarıdakiyle aynıdır. subscript sub1 .. sub2 biçiminde olduğunda, @ ile aynı tırnak içine alma kurallarını kullanarak sub1 ile sub2 (dahil) arasındaki alt simgelerin listesine açılır. ${!prefix} Adları prefix ile başlayan değişkenlerin adlarına açılır. ${parameter:-word} Parametre ayarlanmışsa ve null değilse değerini ikame eder; aksi takdirde word değerini ikame eder. ${parameter:=word} Parametre ayarlanmamışsa veya null ise onu word değerine ayarlar; ardından parametrenin değeri ikame edilir. Konumsal parametrelere bu yolla atama yapılamaz. ${parameter:?word} Parametre ayarlanmışsa ve null değilse değerini ikame eder; aksi takdirde, word değerini yazdırır ve kabuktan çıkar (etkileşimli değilse). word belirtilmezse standart bir mesaj yazdırılır. ${parameter:+word} Parametre ayarlanmışsa ve null değilse word değerini ikame eder; aksi takdirde hiçbir şey ikame etmez. Yukarıdaki ifadelerde word, ikame edilen dizge olarak kullanılmadığı sürece değerlendirilmez; böylece aşağıdaki örnekte pwd komutu yalnızca d ayarlanmamışsa veya null ise yürütülür: print ${d:-$(pwd)} Yukarıdaki ifadelerden iki nokta üst üste ( : ) çıkarılırsa, kabuk yalnızca parametrenin ayarlanıp ayarlanmadığını kontrol eder. ${parameter:offset:length} ${parameter:offset} Parametrenin değerinin, offset aritmetik ifadesinin açılımıyla belirlenen karakterden (0'dan başlayarak) başlayıp, length aritmetik ifadesiyle belirlenen karakter sayısı kadar olan kısmına açılır. İkinci biçimde, değerin geri kalan kısmı kullanılır. Negatif bir offset, parametrenin sonundan geriye doğru sayar. Kabuğun operatörü :- olarak yorumlamasını önlemek için eksi işaretinin önünde bir veya daha fazla boşluk bırakılması gerektiğine dikkat edilmelidir. Parametre ∗ veya @ ise ya da ∗ veya @ ile dizinlenmiş bir dizi adıysa, offset ve length sırasıyla dizi dizinine ve öğe sayısına atıfta bulunur. Negatif bir offset, dizinli diziler için en yüksek alt simgeden bir fazlasına göre hesaplanır. İlişkisel diziler için sıralama belirtilmemiştir. ${parameter#pattern} ${parameter##pattern} Kabuk deseni (pattern), parametrenin değerinin başlangıcıyla eşleşirse, bu açılımın değeri, eşleşen kısmın silindiği parametre değeridir; aksi takdirde bu parametrenin değeri ikame edilir. İlk biçimde en küçük eşleşen desen silinir ve ikinci biçimde en büyük eşleşen desen silinir. Parametre @, * veya alt simgesi @ veya * olan bir dizi değişkeni olduğunda, alt dizge (substring) işlemi sırayla her bir öğeye uygulanır.

${parameter%pattern} ${parameter%%pattern} Kabuk deseni (pattern), parametrenin değerinin sonuyla eşleşerse, bu açılımın değeri, eşleşen kısmın silindiği parametre değeridir; aksi takdirde parametrenin değeri ikame edilir. İlk biçimde en küçük eşleşen desen silinir ve ikinci biçimde en büyük eşleşen desen silinir. Parametre @, * veya alt simgesi @ veya * olan bir dizi değişkeni olduğunda, alt dizge (substring) işlemi sırayla her bir öğeye uygulanır.

${parameter/pattern/string} ${parameter//pattern/string} ${parameter/#pattern/string} ${parameter/%pattern/string} Parametreyi açar ve desenin (pattern) en uzun eşleşmesini verilen string (dizge) ile değiştirir. string içindeki her \n geçişi, parametrenin n-inci alt deseniyle eşleşen kısmıyla değiştirilir. İlk biçimde, yalnızca desenin ilk geçişi değiştirilir. İkinci biçimde, desenin her eşleşmesi verilen string ile değiştirilir. Üçüncü biçim, desen eşleşmesini dizgenin başlangıcıyla kısıtlarken, dördüncü biçim desen eşleşmesini dizgenin sonuyla kısıtlar. string null olduğunda desen silinir ve string önündeki / yoksayılabilir. Parametre @, * veya alt simgesi @ veya * olan bir dizi değişkeni olduğunda, değiştirme işlemi sırayla her bir öğeye uygulanır. Bu durumda, word'ün string kısmı her bir öğe için yeniden değerlendirilecektir.

Aşağıdaki parametreler kabuk tarafından otomatik olarak ayarlanır:

Ondalık tabanda konumsal parametrelerin sayısı.

  •  Kabuğa başlatılırken veya set komutuyla sağlanan seçenekler.
    

? Son yürütülen komut tarafından döndürülen ondalık değer. $ Bu kabuğun süreç numarası (PID). _ Başlangıçta, _'nin değeri, ortamda aktarılan yürütülen kabuğun veya betiğin mutlak yol adıdır. Ardından, bir önceki komutun son bağımsız değişkeni buna atanır. Bu parametre, eşzamansız (asenkron) olan komutlar için ayarlanmaz. Bu parametre ayrıca e-posta kontrolü yaparken eşleşen MAIL dosyasının adını tutmak için de kullanılır. Bileşik bir değişken veya bir tür tanımlanırken, _ bileşik değişkene veya türe bir referans olarak başlatılır. Bir disiplin işlevi çağrıldığında, _ bu işlev çağrısıyla ilişkili değişkene bir referans olarak başlatılır. Son olarak, _ bir tür tanımının ilk değişkeninin adı olarak kullanıldığında, yeni tür ilk değişkenin türünden türetilir (Aşağıdaki Tür Değişkenleri bölümüne bakın). ! Çağrılan son arka plan komutunun süreç kimliği (PID) veya havuz adı ile iş numarası, ya da yerleşik bg komutuyla arka plana atılan en son iş. Adlandırılmış bir havuzda başlatılan arka plan işleri, havuz havuz adı ve numara o havuzdaki iş numarası olmak üzere pool.number biçiminde olacaktır. .sh.command Bir DEBUG trap'i (yakalama eylemi) işlenirken, bu değişken çalışmak üzere olan geçerli komut satırını içerir. .sh.edchar Bu değişken, bir KEYBD trap'i işlenirken girilen klavye karakterinin (veya ilk karakter bir ESC ise, ascii 033, karakter dizisinin) değerini içerir (aşağıdaki Tuş Eşlemeleri bölümüne bakın). Değer trap eyleminin bir parçası olarak değiştirilirse, yeni değer trap'e neden olan tuşun (veya tuş dizisinin) yerini alır. .sh.edcol En son KEYBD trap'i sırasındaki imlecin karakter konumu. .sh.edmode Değer, vi ekleme modundayken bir KEYBD trap'i işlenirken ESC olarak ayarlanır (Aşağıdaki Vi Düzenleme Modu bölümüne bakın). Aksi takdirde, bir KEYBD trap'i işlenirken .sh.edmode null olur. .sh.edtext En son KEYBD trap'i sırasındaki girdi arabelleğindeki karakterler. KEYBD trap'i işlenmiyorken değer null olur. .sh.file Geçerli komutu içeren dosyanın yol adı. .sh.fun Yürütülmekte olan geçerli işlevin adı. .sh.level Geçerli işlev derinliğine ayarlanır. Bu, bir DEBUG trap'i içinde değiştirilebilir ve bağlamı belirtilen seviyeye ayarlayacaktır. .sh.lineno Bir DEBUG trap'i sırasında her bir işlevi çağıranın satır numarasına ayarlanır. .sh.match Koşullu desen eşleşmelerinden sonra ve #, % veya / operatörlerini kullanan değişken açılımlarından sonra en son eşleşmeyi ve alt desen eşleşmelerini saklayan dizinli bir dizi. 0-ıncı öğe tam eşleşmeyi ve i-inci öğe i-inci alt eşleşmeyi saklar. Açılan değişkene yeni bir değer atandığında .sh.match değişkeninin tanımı kaldırılır (unset). .sh.math Aritmetik işlevleri tanımlamak için kullanılır (aşağıdaki Aritmetik Değerlendirme bölümüne bakın) ve kullanıcı tanımlı aritmetik işlevlerin listesini saklar. .sh.name Bir disiplin işlevi çağrıldığı andaki değişkenin adına ayarlanır. .sh.subscript Bir disiplin işlevi çağrıldığı andaki değişkenin alt simge adına ayarlanır. .sh.subshell Alt kabuklar ve komut ikamesi için geçerli derinlik. .sh.value set veya append disiplin işlevi çağrıldığı andaki değişkenin değerine ayarlanır. Kullanıcı tanımlı bir aritmetik işlev çağrıldığında, .sh.value değeri kaydedilir ve .sh.value uzun çift duyarlıklı (long double) kayan noktalı sayıya ayarlanır. İşlev döndüğünde .sh.value geri yüklenir. .sh.version Bu kabuğun sürümünü tanımlayan bir değere ayarlanır. KSH_VERSION .sh.version değişkenine bir ad referansı. LINENO Yürütülmekte olan betik veya işlev içindeki geçerli satır numarası. OLDPWD cd komutu tarafından ayarlanan bir önceki çalışma dizini. OPTARG yerleşik getopts komutu tarafından işlenen son seçenek bağımsız değişkeninin değeri. OPTIND yerleşik getopts komutu tarafından işlenen son seçenek bağımsız değişkeninin dizini. PPID Kabuğun ana (ebeveyn) sürecinin süreç numarası. PWD cd komutu tarafından ayarlanan mevcut çalışma dizini. RANDOM Bu değişkene her başvurulduğunda, 0 ile 32767 arasında tekdüze dağılmış rastgele bir tamsayı oluşturulur. Rastgele sayı dizisi, RANDOM değişkenine sayısal bir değer atanarak başlatılabilir. REPLY Bu değişken, seçme (select) ifadesi ve bağımsız değişken sağlanmadığında yerleşik read komutu tarafından ayarlanır. SECONDS Bu değişkene her başvurulduğunda, kabuk çağrısından bu yana geçen saniye sayısı döndürülür. Bu değişkene bir değer atanırsa, başvurulduğunda döndürülen değer, atanan değer artı atamadan bu yana geçen saniye sayısı olacaktır. SHLVL Kabuk her çağrıldığında artırılan ve dışa aktarılan (export) bir tamsayı değişkeni. Kabuk çağrıldığında SHLVL ortamda yoksa 1 olarak ayarlanır.

Aşağıdaki değişkenler kabuk tarafından kullanılır: CDPATH cd komutu için arama yolu. COLUMNS Bu değişken ayarlanırsa, değer kabuk düzenleme modları ve select listelerinin yazdırılması için düzenleme penceresinin genişliğini tanımlamak amacıyla kullanılır. EDITOR Eğer VISUAL değişkeni ayarlanmamışsa, bu değişkenin değeri aşağıdaki VISUAL ile açıklandığı gibi desenler için kontrol edilecek ve ilgili düzenleme seçeneği (aşağıdaki Özel Komut set bölümüne bakın) etkinleştirilecektir. ENV Bu değişken ayarlanırsa, kabuk etkileşimli olarak çağrıldığında yürütülecek betiğin yol adını üretmek için bu değer üzerinde parametre açılımı, komut ikamesi ve aritmetik ikame gerçekleştirilir (aşağıdaki Başlatma bölümüne bakın). Bu dosya genellikle takma ad ve işlev tanımları için kullanılır. Varsayılan değer $HOME/.kshrc'dir. Sistem genelinde /etc/ksh.kshrc başlatma dosyasını destekleyen sistemlerde, ENV açılımı tarafından üretilen dosya adı /./ veya ././ ile başlıyorsa sistem genelindeki başlatma dosyası yürütülmeyecektir. FCEDIT hist komutu için varsayılan düzenleyici adının kullanımdan kaldırılmış adıdır. HISTEDIT ayarlandığında FCEDIT kullanılmaz. FIGNORE Dosya adı eşleştirmesi gerçekleştirilirken yoksayılacak dosya adları kümesini tanımlayan bir desen. FPATH İşlev tanımları için arama yolu. -u özniteliğine sahip bir işleve başvurulduğunda ve bir komut bulunamadığında, bu yoldaki dizinlerde işlev veya komutla aynı ada sahip bir dosya aranır. Eğer o komutun adını taşıyan yürütülebilir bir dosya bulunursa, mevcut ortamda okunur ve yürütülür. PATH'ten farklı olarak, geçerli dizin, yan yana gelen : karakterleri veya başlangıç ya da sondaki : yerine açıkça . ile temsil edilmelidir. HISTCMD Geçmiş (history) dosyasındaki geçerli komutun numarası. HISTEDIT hist komutu için varsayılan düzenleyici adı. HISTFILE Kabuk çağrıldığında bu değişken ayarlanmışsa, değeri komut geçmişini depolamak için kullanılacak dosyanın yol adıdır (aşağıdaki Komutun Yeniden Girilmesi bölümüne bakın). HISTSIZE Kabuk çağrıldığında bu değişken ayarlanmışsa, bu kabuk tarafından erişilebilen önceden girilmiş komutların sayısı bu sayıya eşit veya ondan büyük olacaktır. Varsayılan değer 512'dir. HOME cd komutu için varsayılan bağımsız değişken (ev dizini). IFS İç alan ayırıcıları (Internal field separators), normalde komut ikamesi veya parametre açılımı sonuçlarını ayırmak ve yerleşik read komutuyla alanları ayırmak için kullanılan boşluk, tab ve yeni satır karakterleridir. IFS değişkeninin ilk karakteri, "$∗" ikamesi için bağımsız değişkenleri ayırmak amacıyla kullanılır (aşağıdaki Tırnak İçine Alma bölümüne bakın). Bölünecek dizge içindeki, isspace karakter sınıfında olmayan her bir IFS karakteri geçişi ve IFS içindeki isspace karakter sınıfında olan bitişik karakterler bir alanı sınırlandırır. IFS içindeki isspace karakter sınıfına ait bir veya daha fazla karakter bir alanı sınırlandırır. Ek olarak, aynı isspace karakteri IFS içinde ardışık olarak görünürse, bu karakter isspace sınıfında değilmiş gibi değerlendirilir, böylece IFS iki tab karakterinden oluşuyorsa, iki bitişik tab karakteri bir null (boş) alanı sınırlandırır. JOBMAX Bu değişken, aynı anda çalışabilecek maksimum arka plan işi sayısını tanımlar. Bu sınıra ulaşıldığında, kabuk yeni bir iş başlatmadan önce bir işin tamamlanmesini bekleyecektir. LANG Bu değişken, LC_ veya LANG ile başlayan bir değişkenle özel olarak seçilmeyen tüm kategoriler için yerel ayar (locale) kategorisini belirler. LC_ALL Bu değişken, LANG değişkeninin ve diğer tüm LC_ değişkenlerinin değerini geçersiz kılar. LC_COLLATE Bu değişken, karakter sıralama (collation) bilgileri için yerel ayar kategorisini belirler. LC_CTYPE Bu değişken, karakter işleme işlevleri için yerel ayar kategorisini belirler. Dosya adı oluşturma için desen eşleştirme karakter sınıflarını belirler (aşağıdaki Dosya Adı Oluşturma bölümüne bakın). LC_NUMERIC Bu değişken, ondalık nokta karakteri için yerel ayar kategorisini belirler. LINES Bu değişken ayarlanırsa, değer select listelerinin yazdırılması için sütun uzunluğunu belirlemek amacıyla kullanılır. Seçim listeleri, LINES satırının yaklaşık üçte ikisi dolana kadar dikey olarak yazdırılacaktır. MAIL Bu değişken bir posta dosyasının adına ayarlanmışsa ve MAILPATH değişkeni ayarlanmamışsa, kabuk kullanıcıyı belirtilen dosyaya yeni posta geldiğinde bilgilendirir. MAILCHECK Bu değişken, kabuğun MAILPATH veya MAIL değişkenleri tarafından belirtilen dosyaların herhangi birinin değiştirilme zamanındaki değişiklikleri ne sıklıkla (saniye cinsinden) kontrol edeceğini belirtir. Varsayılan değer 600 saniyedir. Süre dolduğunda kabuk, bir sonraki istemi (prompt) vermeden önce kontrol edecektir. MAILPATH İki nokta üst üste ( : ) ile ayrılmış dosya adları listesi. Bu değişken ayarlanmışsa kabuk, son MAILCHECK saniye içinde belirtilen dosyalarda meydana gelen herhangi bir değişikliği kullanıcıya bildirir. Her dosya adının arkasından bir ? ve yazdırılacak bir mesaj gelebilir. Mesaj, değişen dosyanın adı olarak tanımlanan $_ değişkeni ile parametre açılımına, komut ikamesine ve aritmetik ikameye tabi tutulacaktır. Varsayılan mesaj: $_ dosyasında postanız var. PATH Komutlar için arama yolu (aşağıdaki Yürütme bölümüne bakın). Kullanıcı rksh altında yürütme yapıyorsa PATH değişkenini değiştiremez (.profile dosyası hariç). PS1 Bu değişkenin değeri, varsayılan olarak $'' olan birincil istem (prompt) dizgesini tanımlamak için parametre açılımı, komut ikamesi ve aritmetik ikame için açılır. Birincil istem dizgesindeki ! karakteri komut numarasıyla değiştirilir (aşağıdaki Komutun Yeniden Girilmesi bölümüne bakın). Yan yana iki ! karakteri, istem dizgesi yazdırıldığında tek bir ! üretecektir. PS2 İkincil istem dizgesi, varsayılan olarak > ''. PS3 Bir select döngüsü içinde kullanılan seçim istemi dizgesi, varsayılan olarak #? ''. PS4 Bu değişkenin değeri parametre değerlendirmesi, komut ikamesi ve aritmetik ikame için açılır ve bir yürütme izinin (execution trace) her satırının önüne eklenir. Varsayılan olarak PS4 + '' karakteridir. Ek olarak PS4 ayarlanmadığında, yürütme izi istemi de ``+ '' olur. SHELL Kabuğun yol adı ortamda tutulur. Başlatma sırasında, bu değişkenin temel adı (basename) rsh, rksh veya krsh ise, kabuk kısıtlı hale gelir. Eğer pfsh veya pfksh ise, kabuk bir profil kabuğu haline gelir (bkz. pfexec(1)). TIMEFORMAT Bu parametrenin değeri, time rezerve edilmiş sözcüğü ile başlayan boru hatları için zamanlama bilgilerinin nasıl görüntüleneceğini belirten bir biçim dizgesi olarak kullanılır. % karakteri, bir zaman değerine veya diğer bilgilere açılan bir biçim dizisini tanıtır. Biçim dizileri ve anlamları aşağıdaki gibidir: %% Harfi harfine bir %. %[p][l]R Saniye cinsinden geçen süre. %[p][l]U Kullanıcı modunda harcanan CPU saniye sayısı. %[p][l]S Sistem modunda harcanan CPU saniye sayısı. %P (U + S) / R olarak hesaplanan CPU yüzdesi.

Köşeli parantezler isteğe bağlı kısımları belirtir. İsteğe bağlı p, hassasiyeti, yani ondalık noktadan sonraki kesirli basamak sayısını belirten bir rakamdır. 0 değeri, hiçbir ondalık noktanın veya kesrin çıktı olarak verilmemesine neden olur. Ondalık noktadan sonra en fazla üç basamak görüntülenebilir; 3'ten büyük p değerleri 3 olarak kabul edilir. Eğer p belirtilmezse 3 değeri kullanılır.

İsteğe bağlı l, sıfırdan büyükse saatleri, dakikaları ve saniyeleri içeren HHhMMmSS.FFs biçiminde daha uzun bir formatı belirtir. Kesrin dahil edilip edilmeyeceğini p değeri belirler.

Diğer tüm karakterler değişiklik yapılmadan çıktı olarak verilir ve sonuna bir yeni satır eklenir. Ayarlanmamışsa, varsayılan değer olan $'\nreal\t%2lR\nuser\t%2lU\nsys%2lS' kullanılır. Değer null ise, hiçbir zamanlama bilgisi görüntülenmez.

TMOUT Sıfırdan büyük bir değere ayarlanırsa, TMOUT yerleşik read komutu için varsayılan zaman aşımı değeri olacaktır. Girdi bir terminalden geldiğinde select bileşik komutu TMOUT saniye sonra sonlanır. Aksi takdirde, bir terminalden okuma yaparken belirtilen saniye içinde bir satır girilmezse kabuk sonlanacaktır. (Kabuğun, bu değer için aşılamayacak maksimum bir sınırla derlenebileceğine dikkat edilmelidir.)

VISUAL Bu değişkenin değeri [Vv][Ii] deseniyle eşleşirse vi seçeneği (aşağıdaki Özel Komut set bölümüne bakın) etkinleştirilir. Değer gmacs deseniyle eşleşirse gmacs seçeneği etkinleştirilir. Değer macs deseniyle eşleşirse emacs seçeneği etkinleştirilecektir. VISUAL değeri, EDITOR değerini geçersiz kılar.

Kabuk PATH, PS1, PS2, PS3, PS4, MAILCHECK, FCEDIT, TMOUT ve IFS değişkenlerine varsayılan değerler verirken, HOME, SHELL, ENV ve MAIL değişkenleri kabuk tarafından hiç ayarlanmaz (ancak HOME, login(1) tarafından ayarlanır). Bazı sistemlerde MAIL ve SHELL de login(1) tarafından ayarlanır.

Alan Bölme (Field Splitting). Parametre açılımı ve komut ikamesinden sonra, ikame sonuçları alan ayırıcı karakterler (IFS içinde bulunanlar) için taranır ve bu tür karakterlerin bulunduğu yerlerde ayrı alanlara bölünür. Açık null (boş) alanlar ("" veya ′′) korunur. Örtük null alanlar (değeri olmayan parametrelerden veya çıktısı olmayan komut ikamelerinden kaynaklananlar) kaldırılır.

Eğer braceexpand (-B) seçeneği ayarlanmışsa, IFS'ten kaynaklanan alanların her biri {,}, {l1..l2}, {n1..n2}, {n1..n2% fmt}, {n1..n2 ..n3} veya {n1..n2 ..n3%fmt} küme parantezi desenlerinden bir veya daha fazlasını içerip içermediğini görmek için kontrol edilir; burada * herhangi bir karakteri temsil eder, l1, l2 harflerdir, n1, n2, n3 işaretli sayılardır ve fmt, printf tarafından kullanıldığı gibi belirtilen bir biçimdir. Her durumda, { işaretinden önceki karakterler { ve } arasındaki karakterler tarafından üretilen dizgelerin her birinin önüne getirilerek ve } işaretinden sonraki karakterler bu dizgelerin sonuna eklenerek alanlar oluşturulur. Elde edilen alanlar, herhangi bir küme parantezi deseni içerip içermediğini görmek için kontrol edilir.

İlk biçimde, { ve , arası, , ve , arası ve , ve } arası her bir dizge için bir alan oluşturulur. * ile temsil edilen dizge, tırnak içine alınmadan iç içe eşleşen { ve } içerebilir. Aksi takdirde, * içeren her bir { ve } tırnak içine alınmalıdır.

İkinci biçimde, l1 ve l2'nin her ikisi de C yerel ayarında ya büyük harf ya da her ikisi de küçük harf olmalıdır. Bu durumda, l1'den l2'ye kadar olan her bir karakter için bir alan oluşturulur.

Kalan biçimlerde, n1'den başlayıp n1'i n3 kadar artırarak n2'ye ulaşana kadar devam eden her bir sayı için bir alan oluşturulur. n3'ün belirtilmediği durumlar, n1<=n2 ise n3 1, aksi takdirde -1 imiş gibi davranır. %fmt belirten biçimlerde, herhangi bir biçim bayrağı (format flag), genişlik ve hassasiyet belirtilebilir ve fmt cdiouxX belirteçlerinden herhangi biriyle bitebilir. Örneğin, {a,z}{1..5..3%02d}{b..c}x ifadesi 8 alana açılır: a01bx, a01cx, a04bx, a04cx, z01bx, z01cx, z04bx ve z4cx.

Dosya Adı Oluşturma (File Name Generation). Bölme işleminin ardından, -f seçeneği ayarlanmadığı sürece her alan ∗, ?, ( ve [ karakterleri için taranır. Bu karakterlerden biri görünürse, sözcük bir desen (pattern) olarak kabul edilir. Herhangi bir desen karakteri içeren her dosya adı bileşeni, o dizindeki desenle eşleşen sözlüksel (lexicographically) olarak sıralanmış bir adlar kümesiyle değiştirilir. Desenle eşleşen hiçbir dosya adı bulunamazsa, desene ∼(N) ön eki getirilmediği sürece dosya adının o bileşeni değiştirilmeden bırakılır; ∼(N) ön eki getirilmişse aşağıda açıklandığı gibi kaldırılır. Eğer FIGNORE ayarlanmışsa, eşleşen dosya adları oluşturulurken FIGNORE değeri tarafından tanımlanan desenle eşleşen her dosya adı bileşeni yoksayılır. . ve .. adları da yoksayılır. FIGNORE ayarlanmamışsa, bu bileşene karşılık gelen desenin ilk karakteri . karakterinin kendisi olmadığı sürece, her dosya adı bileşeninin başlangıcındaki . karakteri yoksayılacaktır. Desen eşleştirmenin diğer kullanımları için / ve . karakterlerine özel bir işlem yapılmadığına dikkat edilmelidir.

∗ Boş dizge dahil herhangi bir dizgeyle eşleşir. Dosya adı açılımı için kullanıldığında, globstar seçeneği açıksa, kendi başına yan yana gelen iki ∗, tüm dosyalarla ve sıfır veya daha fazla dizin ve alt dizinle eşleşecektir. Eğer bunu bir / takip ediyorsa, yalnızca dizinler ve alt dizinler eşleşecektir. ? Herhangi bir tek karakterle eşleşir. [...] Köşeli parantez içine alınan karakterlerden herhangi biriyle eşleşir. - ile ayrılmış bir çift karakter, aralarındaki sözlüksel olarak her karakterle (dahil) eşleşir. Açılış [ işaretini takip eden ilk karakter bir ! veya ^ ise, köşeli parantez içine alınmayan herhangi bir karakter eşleşir. Karakter kümesine ilk veya son karakter olarak konularak bir - dahil edilebilir. [ ve ] içinde, karakter sınıfları [:class:] sözdizimi ile belirtilebilir; burada class, ANSI-C standardında tanımlanan aşağıdaki sınıflardan biridir: (word sınıfının, alnum artı _ karakterine eşdeğer olduğuna dikkat edilmelidir.) alnum alpha blank cntrl digit graph lower print punct space upper word xdigit [ ve ] içinde, c karakteriyle aynı birincil sıralama ağırlığına (geçerli yerel ayar tarafından tanımlandığı gibi) sahip tüm karakterlerle eşleşen [=c=] sözdizimi ile bir eşdeğerlik sınıfı belirtilebilir. [ ve ] içinde, [.symbol.] sıralama simgesi symbol ile eşleşir. Bir desen-listesi (pattern-list), birbirlerinden & veya ⎪ ile ayrılmış bir veya daha fazla desenin listesidir. Bir &, tüm desenlerin eşleşmesi gerektiğini belirtirken, ⎪ yalnızca bir desenin eşleşmesinin yeterli olduğunu belirtir. Aşağıdaki alt desenlerden bir veya daha fazlasıyla bileşik desenler oluşturulabilir: ?(pattern-list) İsteğe bağlı olarak verilen desenlerden herhangi biriyle eşleşir. *(pattern-list) Verilen desenlerin sıfır veya daha fazla geçişiyle eşleşir. +(pattern-list) Verilen desenlerin bir veya daha fazla geçişiyle eşleşir. {n}(pattern-list) Verilen desenlerin n geçişiyle eşleşir. {m,n}(pattern-list) Verilen desenlerin m'den n'ye kadar olan geçişleriyle eşleşir. Eğer m belirtilmezse 0 kullanılır. Eğer n belirtilmezse en az m geçiş eşleşecektir. @(pattern-list) Verilen desenlerden tam olarak biriyle eşleşir. !(pattern-list) Verilen desenlerden biri hariç her şeyle eşleşir. Varsayılan olarak, her desen veya alt desen, en uzun genel eşleşmeyi üretmekle uyumlu olarak mümkün olan en uzun dizgeyle eşleşecektir. Birden fazla eşleşme mümkünse, dizgenin başlangıcına en yakın olanı seçilecektir. Ancak, yukarıdaki bileşik desenlerin her biri için, belirtilen desen-listesine en kısa eşleşmenin kullanılmasını sağlamak amacıyla ( işaretinin önüne bir - eklenebilir.

Desen-listesi parantez içinde yer aldığında, ters taksim (backslash) karakteri \ bir karakter sınıfı içinde olsa bile özel olarak işlenir. Tüm ANSI-C karakter kaçış dizileri (character escapes) tanınır ve belirtilen karakterle eşleşir. Ek olarak aşağıdaki kaçış dizileri tanınır: \d digit (rakam) sınıfındaki herhangi bir karakterle eşleşir. \D digit sınıfında olmayan herhangi bir karakterle eşleşir. \s space (boşluk) sınıfındaki herhangi bir karakterle eşleşir. \S space sınıfında olmayan herhangi bir karakterle eşleşir. \w word (sözcük) sınıfındaki herhangi bir karakterle eşleşir. \W word sınıfında olmayan herhangi bir karakterle eşleşir.

%(pattern-pair(s)) biçimindeki bir desen, iç içe geçmiş karakter ifadelerini eşleştirmek için kullanılabilen bir alt desendir. Her desen-çifti (pattern-pair), & veya ⎪ içeremeyen iki karakterlik bir dizidir. İlk desen-çifti, eşleşme için başlangıç ve bitiş karakterlerini belirtir. Sonraki her bir desen-çifti, başlangıç ve bitiş karakteri eşleşmelerini sayarken atlanacak olan iç içe geçmiş bir grubun başlangıç ve bitiş karakterlerini temsil eder. Bir desen-çiftinin ilk karakteri alfasayısal olduğunda, aşağıdakiler hariç davranış belirtilmemiştir: D Bitiş karakterinin bir eşleşme bulamadan bu desen için aramayı sonlandırmasına neden olur. E Bitiş karakterinin bir kaçış (escape) karakteri olarak yorumlanmasına neden olur. L Bitiş karakterinin bir tırnak (quote) karakteri olarak yorumlanmasına neden olur ve bir eşleşme aranırken tüm karakterlerin yoksayılmasını sağlar. Q Bitiş karakterinin bir tırnak karakteri olarak yorumlanmasına neden olur ve bir eşleşme aranırken herhangi bir kaçış karakteri dışındaki tüm karakterlerin yoksayılmasını sağlar. Böylece, %({}Q"E), çift tırnaklı bir dizgenin içinde olan veya kaçış karakteri \ ile öncelenmiş olan hiçbir { veya } karakterini saymadan, {'den başlayarak eşleşen } bulunana kadar olan karakterlerle eşleşir. {} olmadan bu desen herhangi bir C dili dizgesiyle eşleşir.

Bileşik bir desendeki her bir alt desen, desen içindeki ( karakterinin konumuna göre 1'den başlayarak numaralandırılır. n tek bir rakam olmak ve \n n-inci alt desenden sonra gelmek üzere \n dizisi, alt desenin kendisiyle aynı dizgeyle eşleşir.

Son olarak bir desen, options veya :pattern-list kısımlarından birinin yoksayılabileceği ∼(options:pattern-list) biçimindeki alt desenleri içerebilir. Diğer bileşik desenlerin aksine, bu alt desenler numaralandırılmış alt desenlerde sayılmaz. Aşağıdaki F, G, N ve V seçenekleri için :pattern-list yoksayılmalıdır. options mevcutsa, aşağıdakilerden bir veya daha fazlasından oluşabilir:

  •  Aşağıdaki seçenekleri etkinleştirir. Varsayılan budur.
    
  •  Aşağıdaki seçenekleri devre dışı bırakır.
    

E Desen geri kalanı egrep(1) komutu gibi genişletilmiş düzenli ifade (extended regular expression) sözdizimini kullanır. F Desen geri kalanı fgrep(1) ifade sözdizimini kullanır. G Desen geri kalanı grep(1) komutu gibi temel düzenli ifade (basic regular expression) sözdizimini kullanır. K Desen geri kalanı kabuk deseni sözdizimini kullanır. Varsayılan budur. N Bu yoksayılır. Ancak, ilk harf olduğunda ve dosya adı oluşturma ile birlikte kullanıldığında hiçbir eşleşme gerçekleşmezse, dosya deseni boş dizgeye açılır. X Desen geri kalanı xgrep(1) komutu gibi artırılmış düzenli ifade (augmented regular expression) sözdizimini kullanır. P Desen geri kalanı perl(1) düzenli ifade sözdizimini kullanır. perl düzenli ifade sözdiziminin tamamı şu anda uygulanmamıştır. V Desen geri kalanı System V düzenli ifade sözdizimini kullanır. i Eşleşmeyi büyük/küçük harfe duyarsız olarak kabul eder. g En uzun eşleşmeyi bulur (greedy). Varsayılan budur. l Deseni sola dayar (Left anchor). K tarzı desenler için varsayılan budur. r Deseni sağa dayar (Right anchor). K tarzı desenler için varsayılan budur. Hem options hem de :pattern-list belirtilmişse, seçenekler yalnızca pattern-list için geçerli olur. Aksi takdirde, bu seçenekler sonraki bir ∼(...) ile devre dışı bırakılana kadar veya ∼(...) içeren alt desenin sonuna kadar geçerli kalır.

Tırnak İçine Alma (Quoting). Daha önce listelenen metakarakterlerin her biri (yukarıdaki Tanımlar bölümüne bakın) kabuk için özel bir anlama sahiptir ve tırnak içine alınmadığı sürece bir sözcüğün sonlanmasına neden olur. Bir karakterin önüne \ getirilerek tırnak içine alınabilir (yani kendi karakter değerini temsil etmesi sağlanır). \yeni-satır çifti kaldırılır. Önünde $ bulunmayan tek tırnak işaretleri (′′) arasına alınan tüm karakterler tırnak içine alınmış (korunmuş) olur. Tek tırnaklar içinde tek bir tırnak işareti görünemez. Önünde tırnak içine alınmamış bir $ bulunan tek tırnaklı bir dizge, aşağıdakiler hariç olmak üzere bir ANSI-C dizgesi olarak işlenir: \0 Dizgenin geri kalanının yoksayılmasına neden olur. \E Kaçış (escape) karakterine (ascii 033) eşdeğerdir, \e Kaçış (escape) karakterine (ascii 033) eşdeğerdir, \cx control-x karakterine açılır. \C[.name.] Sıralama öğesi name değerine açılır.

Çift tırnak işaretleri ("") içinde parametre ve komut ikamesi gerçekleşir ve \ karakteri , , " ve $ karakterlerini tırnak içine alır (kaçar). Çift tırnaklı bir dizgenin önündeki bir $, "C" veya "POSIX" yerel ayarında yoksayılır ve aksi takdirde dizgenin yerel ayara özgü bir dizgeyle değiştirilmesine neden olabilir. $∗ ve $@ karakterlerinin anlamı, tırnak içine alınmadığında veya değişken atama değeri ya da dosya adı olarak kullanıldığında aynıdır. Ancak, bir komut bağımsız değişkeni olarak kullanıldığında, "$∗" ifadesi (d, IFS değişkeninin ilk karakteri olmak üzere) "$1d$2d..." ifadesine eşdeğerken, "$@" ifadesi "$1" "$2" ... ifadesine eşdeğerdir. Ters tırnak (grave quote) işaretleri (``) içinde, \ karakteri \, ve $ karakterlerini kaçar. Ters tırnaklar çift tırnak içinde yer alıyorsa, \ karakteri " karakterini de kaçar.

Rezerve edilmiş sözcüğün herhangi bir karakteri tırnak içine alınarak, rezerve edilmiş sözcüklerin veya takma adların özel anlamı kaldırılabilir. Aşağıda listelenen işlev adlarının veya yerleşik komut adlarının tanınması, onları tırnak içine alarak değiştirilemez.

Aritmetik Değerlendirme (Arithmetic Evaluation). Kabuk; aritmetik ikame için, bir aritmetik komutu değerlendirmek için, dizinli bir dizi alt simgesini değerlendirmek için ve yerleşik shift ve let komutlarına yönelik bağımsız değişkenleri değerlendirmek için aritmetik değerlendirme gerçekleştirir. Değerlendirmeler, çift duyarlıklı (double precision) kayan noktalı aritmetik veya bu veri türünü sağlayan sistemler için uzun çift duyarlıklı (long double precision) kayan noktalı aritmetik kullanılarak gerçekleştirilir. Kayan noktalı sabitler, ANSI-C programlama dili kayan noktalı sayı kurallarını takip eder. Kayan noktalı Nan ve Inf sabitleri, sırasıyla "sayı değil" (not a number) ve sonsuzluğu temsil etmek için kullanılabilir. Tamsayı sabitleri, yalnızca tek baytlık karakter sabitleri tanınmasına ve karakter tür dönüşümlerinin (casts) tanınmamasına rağmen, ANSI-C programlama dili tamsayı sabiti kurallarını takip eder. Ek olarak, sabitler [base#]n biçiminde olabilir; burada base, aritmetik tabanı temsil eden iki ile altmış dört arasında ondalık bir sayıdır ve n bu tabandaki bir sayıdır. 9'un üzerindeki basamaklar sırasıyla küçük harfler, büyük harfler, @ ve _ ile temsil edilir. 36'ya eşit veya daha küçük tabanlar için büyük ve küçük harfler birbirinin yerine kullanılabilir.

Bir aritmetik ifade, C diliyle aynı sözdizimini, önceliği ve ifade birleşebilirliğini (associativity) kullanır. C dilinde kayan noktalı miktarlara uygulanan tüm operatörler kullanılabilir. Ek olarak, üs alma için ** operatörü kullanılabilir. Çarpmadan daha yüksek önceliğe sahiptir ve sola birleşmelidir (left associative). Ek olarak, bir aritmetik değişkenin veya alt ifadenin değeri uzun bir tamsayı olarak temsil edilebildiğinde, tüm C dili tamsayı aritmetik işlemleri gerçekleştirilebilir. Değişkenlere, parametre açılımı sözdizimi kullanılmadan aritmetik bir ifade içinde adlarıyla başvurulabilir. Bir değişkene başvurulduğunda, değeri bir aritmetik ifade olarak değerlendirilir.

C matematik kütüphanesinde bulunan aşağıdaki matematik kütüphanesi işlevlerinden herhangi biri bir aritmetik ifade içinde kullanılabilir:

abs acos acosh asin asinh atan atan2 atanh cbrt ceil copysign cos cosh erf erfc exp exp2 expm1 fabs fpclassify fdim finite floor fma fmax fmin fmod hypot ilogb int isfinite sinf isnan isnormal issubnormal issubordered iszero j0 j1 jn lgamma log log10 log2 logb nearbyint nextafter nexttoward pow remainder rint round scanb signbit sin sinh sqrt tan tanh tgamma trunc y0 y1 yn Ayrıca, aritmetik işlevler işlev adı sözdiziminin bir varyantıyla kabuk işlevleri olarak tanımlanabilir:

function .sh.math.name ident ... { list ;} burada name, aritmetik ifadede kullanılan işlev adıdır ve her bir tanımlayıcı (ident), uzun çift duyarlıklı kayan noktalı sayı bağımsız değişkenine bir ad referansıdır (nameref). İşlev döndüğünde .sh.value değeri bu işlevin değeridir. Kullanıcı tanımlı işlevler 3 adede kadar bağımsız değişken alabilir ve C matematik kütüphanesi işlevlerini geçersiz kılabilir.

An internal representation of a variable as a double precision floating point can be specified with the -E [n], -F [n], or -X [n] option of the typeset special built-in command. The -E option causes the expansion of the value to be represented using scientific notation when it is expanded. The optional option argument n defines the number of significant figures. The -F option causes the expansion to be represented as a floating decimal number when it is expanded. The -X option cause the expansion to be represented using the %a format defined by ISO C-99. The optional option argument n defines the number of places after the decimal (or radix) point in this case.

An internal integer representation of a variable can be specified with the -i [n] option of the typeset special built-in command. The optional option argument n specifies an arithmetic base to be used when expanding the variable. If you do not specify an arithmetic base, base 10 will be used.

Aritmetik değerlendirme, -E,

  • -F, -X veya -i özniteliğine: sahip bir değişkene yapılan her atamanın değeri üzerinde gerçekleştirilir. Tipi tamsayı olan bir değişkene kayan noktalı bir sayı atanması, kesirli kısmın kırpılmasına neden olur.

İstem Verme (Prompting). Etkileşimli olarak kullanıldığında, kabuk bir komutu okumadan önce PS1 değerini parametre açılımı, komut ikamesi ve aritmetik ikame için açtıktan sonra bu değerle istem (prompt) verir. Ek olarak, istemdeki her tek ! işareti komut numarasıyla değiştirilir. İstem içine ! yerleştirmek için !! gereklidir. Herhangi bir zamanda yeni bir satır yazılırsa ve bir komutu tamamlamak için daha fazla girdi gerekiyorsa, ikincil istem (yani PS2 değeri) verilir.

Koşullu İfadeler (Conditional Expressions). Dosyaların özniteliklerini test etmek ve dizgeleri karşılaştırmak için [[ bileşik komutuyla birlikte bir koşullu ifade kullanılır. [[ ve ]] arasındaki sözcükler üzerinde alan bölme (field splitting) ve dosya adı oluşturma (file name generation) işlemleri gerçekleştirilmez. Her bir ifade, aşağıdaki tekli (unary) veya ikili (binary) ifadelerden bir veya daha fazlasından oluşturulabilir: string Doğru, eğer string null (boş) değilse. -a dosya Aşağıdaki -e ile aynıdır. Kullanımdan kaldırılmıştır. -b dosya Doğru, eğer dosya mevcutsa ve bir blok özel dosyasıysa. -c dosya Doğru, eğer dosya mevcutsa ve bir karakter özel dosyasıysa. -d dosya Doğru, eğer dosya mevcutsa ve bir dizinse. -e dosya Doğru, eğer dosya mevcutsa. -f dosya Doğru, eğer dosya mevcutsa ve sıradan bir dosyaysa. -g dosya Doğru, eğer dosya mevcutsa ve setgid biti ayarlanmışsa. -k dosya Doğru, eğer dosya mevcutsa ve sticky biti ayarlanmışsa. -n string Doğru, eğer string uzunluğu sıfır dışıysa. -o ?seçenek Doğru, eğer seçenek adını taşıyan seçenek geçerli bir seçenek adıysa. -o seçenek Doğru, eğer seçenek adını taşıyan seçenek etkinse. -p dosya Doğru, eğer dosya mevcutsa ve bir fifo özel dosyası veya bir boru (pipe) ise. -r dosya Doğru, eğer dosya mevcutsa ve geçerli süreç tarafından okunabilir durumdaysa. -s dosya Doğru, eğer dosya mevcutsa ve boyutu sıfırdan büyükse. -t dosya_tan Doğru, eğer dosya_tan numaralı dosya tanımlayıcısı açıksa ve bir terminal cihazıyla ilişkilendirilmişse. -u dosya Doğru, eğer dosya mevcutsa ve setuid biti ayarlanmışsa. -v ad Doğru, eğer ad değişken adı geçerli bir değişken adıysa ve ayarlanmışsa. -w dosya Doğru, eğer dosya mevcutsa ve geçerli süreç tarafından yazılabilir durumdaysa. -x dosya Doğru, eğer dosya mevcutsa ve geçerli süreç tarafından yürütülebilirse. Eğer dosya mevcutsa ve bir dizinse, geçerli sürecin dizinde arama yapma izni varsa doğrudur. -z string Doğru, eğer string uzunluğu sıfırsa. -L dosya Doğru, eğer dosya mevcutsa ve bir sembolik bağ (symbolic link) ise. -h dosya Doğru, eğer dosya mevcutsa ve bir sembolik bağ ise. -N dosya Doğru, eğer dosya mevcutsa ve değiştirilme zamanı son erişim zamanından daha yeniyse. -O dosya Doğru, eğer dosya mevcutsa ve bu sürecin etkin kullanıcı kimliğine (effective UID) aitse. -G dosya Doğru, eğer dosya mevcutsa ve grubu bu sürecin etkin grup kimliğiyle (effective GID) eşleşiyorsa. -R ad Doğru, eğer ad değişkeni bir ad referansı (name reference) ise. -S dosya Doğru, eğer dosya mevcutsa ve bir soket (socket) ise. dosya1 -nt dosya2 Doğru, eğer dosya1 mevcutsa ve dosya2 mevcut değilse, ya da dosya1 dosya2'den daha yeniyse. dosya1 -ot dosya2 Doğru, eğer dosya2 mevcutsa ve dosya1 mevcut değilse, ya da dosya1 dosya2'den daha eskiyse. dosya1 -ef dosya2 Doğru, eğer dosya1 ve dosya2 mevcutsa ve aynı dosyaya atıfta bulunuyorsa. string == pattern Doğru, eğer string desen (pattern) ile eşleşirse. Eşleşmenin bir dizge olarak yapılmasını sağlamak amacıyla desenin herhangi bir kısmı tırnak içine alınabilir. Bir desenle başarılı bir eşleşme yapıldığında, .sh.match dizi değişkeni eşleşmeyi ve alt desen eşleşmelerini içerecektir. string = pattern Yukarıdaki == ile aynıdır ancak kullanımdan kaldırılmıştır. string != pattern Doğru, eğer string desen ile eşleşmezse. Dizge desenle eşleştiğinde, .sh.match dizi değişkeni eşleşmeyi ve alt desen eşleşmelerini içerecektir. string =∼ ere Doğru, eğer string, ere genişletilmiş bir düzenli ifade (extended regular expression) olmak üzere ∼(E)ere deseniyle eşleşirse. string1 < string2 Doğru, eğer karakterlerinin ASCII değerlerine göre string1 string2'den önce geliyorsa. string1 > string2 Doğru, eğer karakterlerinin ASCII değerlerine göre string1 string2'den sonra geliyorsa. Aşağıdaki kullanımdan kaldırılmış aritmetik karşılaştırmalara da izin verilir: exp1 -eq exp2 Doğru, eğer exp1 exp2'ye eşitse. exp1 -ne exp2 Doğru, eğer exp1 exp2'ye eşit değilse. exp1 -lt exp2 Doğru, eğer exp1 exp2'den küçükse. exp1 -gt exp2 Doğru, eğer exp1 exp2'den büyükse. exp1 -le exp2 Doğru, eğer exp1 exp2'den küçük veya eşitse. exp1 -ge exp2 Doğru, eğer exp1 exp2'den büyük veya eşitse.

Yukarıdaki ifadelerin her birinde, eğer dosya /dev/fd/n biçimindeyse (n bir tamsayıdır), test tanımlayıcı numarası n olan açık dosyaya uygulanır.

Bileşik bir ifade, azalan öncelik sırasına göre listelenen aşağıdakilerden herhangi biri kullanılarak bu ilkel öğelerden oluşturulabilir: (ifade) Doğru, eğer ifade doğruysa. İfadeleri gruplandırmak için kullanılır. ! ifade Doğru, eğer ifade yanlışsa. ifade1 && ifade2 Doğru, eğer ifade1 ve ifade2'nin her ikisi de doğruysa. ifade1 ⎪⎪ ifade2 Doğru, eğer ifade1 veya ifade2'den biri doğruysa.

Girdi/Çıktı (Input/Output). Bir komut yürütülmeden önce, girdisi ve çıktısı kabuk tarafından yorumlanan özel bir gösterim kullanılarak yönlendirilebilir. Aşağıdakiler basit bir komutun herhangi bir yerinde görünebilir veya bir komuttan önce ya da sonra gelebilir ve çağrılan komuta aktarılmaz. Aşağıde belirtilenler dışında, word veya basamak kullanılmadan önce komut ikamesi, parametre açılımı ve aritmetik ikame gerçekleşir. Dosya adı oluşturma (file name generation) yalnızca kabuk etkileşimliyse ve desen tek bir dosyayla eşleşiyorsa gerçekleşir. Alan bölme işlemi gerçekleştirilmez.

Aşağıdaki yönlendirmelerin her birinde, dosya /dev/sctp/host/port, /dev/tcp/host/port veya /dev/udp/host/port biçimindeyse (burada host bir ana bilgisayar adı veya ana bilgisayar adresi ve port isimle verilen bir hizmet ya da tamsayı bağlantı noktası numarasıdır), yönlendirme ilgili sokete bir tcp, sctp veya udp bağlantısı kurmaya çalışır.

Yönlendirme operatörlerinin karakterleri arasında boşluk bırakılmasına izin verilmez.

<word word dosyasını standart girdi (dosya tanımlayıcısı 0) olarak kullanır.

word word dosyasını standart çıktı (dosya tanımlayıcısı 1) olarak kullanır. Dosya mevcut değilse oluşturulur. Dosya mevcutsa ve noclobber seçeneği etkinse, bu bir hataya neden olur; aksi takdirde dosya boyutu sıfıra indirilir (truncated).

|word noclobber seçeneğini geçersiz kılması dışında > ile aynıdır.

;word Çıktıyı geçici bir dosyaya yazar. Komut başarıyla tamamlanırsa dosyayı word olarak yeniden adlandırır; aksi takdirde geçici dosyayı siler. >;word, yerleşik exec(2) ile birlikte kullanılamaz.

word word dosyasını standart çıktı olarak kullanır. Dosya mevcutsa çıktı sonuna eklenir (önce dosya sonuna konumlanarak); aksi takdirde dosya oluşturulur.

<>word word dosyasını standart çıktı olarak hem okuma hem de yazma için açar.

<>;word Komut başarıyla tamamlandığında word dosyasının komut tamamlanmasındaki konuma (offset) kadar kırpılması dışında <>word ile aynıdır. <>;word, yerleşik exec(2) ile birlikte kullanılamaz.

<<[-]word Herhangi bir tırnak işareti kaldırıldıktan sonra word ile aynı olan bir satıra veya dosya sonuna (end-of-file) kadar kabuk girdisi okunur. word üzerinde hiçbir parametre ikamesi, komut ikamesi, aritmetik ikame veya dosya adı oluşturma işlemi gerçekleştirilmez. Ortaya çıkan ve here-document (burada-belgesi) olarak adlandırılan belge standart girdi haline gelir. word'ün herhangi bir karakteri tırnak içine alınmışsa, belgenin karakterleri üzerinde hiçbir yorumlama yapılmaz; aksi takdirde parametre açılımı, komut ikamesi ve aritmetik ikame gerçekleşir, \yeni-satır yoksayılır ve , $, ` karakterlerini kaçırmak için \ kullanılmalıdır. Eğer << işaretine - eklenirse, word'den ve belgeden tüm öncü tab karakterleri temizlenir. Eğer << işaretine # eklenirse, belgenin ilk satırından öncü boşluklar ve tablar temizlenir ve kalan satırlardan ve word'den eşdeğer bir girintiye kadar olan kısım temizlenir. Girintiyi belirlemek amacıyla her 8 sütunda bir tab durağı olduğu varsayılır.

<<<word Herhangi bir parametre açılımı, komut ikamesi ve aritmetik ikame gerçekleştikten sonra word'ün here-document içeriği haline geldiği here-document'in kısa bir biçimidir.

<&digit Standart girdi, dosya tanımlayıcısı digit'ten kopyalanır (bkz. dup(2)). Benzer şekilde >&digit kullanılarak standart çıktı için de geçerlidir.

<&digit- digit ile belirtilen dosya tanımlayıcısı standart girdiye taşınır. Benzer şekilde >&digit- kullanılarak standart çıktı için de geçerlidir.

<&- Standart girdi kapatılır. Benzer şekilde >&- kullanılarak standart çıktı için de geçerlidir.

<&p Ortak süreçten (co-process) gelen girdi standart girdiye taşınır.

&p Ortak sürece (co-process) giden çıktı standart çıktıya taşınır.

<#((expr)) expr aritmetik ifadesini değerlendirir ve dosya tanımlayıcısı 0'ı dosya başlangıcından itibaren elde edilen değer baytı kadar konumlandırır. CUR ve EOF değişkenleri, expr değerlendirilirken sırasıyla geçerli konuma ve dosya sonu konumuna karşılık gelir.

#((offset)) dosya tanımlayıcısı 1'e uygulanması dışında <# ile aynıdır.

<#pattern pattern içeren bir sonraki satırın başlangıcına doğru ileriye konumlanır.

<##pattern Dosyanın atlanan kısmının standart çıktıya kopyalanması dışında <# ile aynıdır.

Yukarıdakilerden birinin önüne, aralarında boşluk bırakılmadan bir rakam getirilirse, başvurulan dosya tanımlayıcı numarası (varsayılan 0 veya 1 yerine) rakamla belirtilen numara olur. Yukarıdakilerden, >&- ve ># ve <# biçimleri hariç olmak üzere, önüne aralarında boşluk bırakılmadan {varname} getirilirse, kabuk tarafından > 10 olan bir dosya tanımlayıcı numarası seçilecek ve varname değişkeninde saklanacaktır. Eğer >&- veya ># ve <# biçimlerinden herhangi birinin önüne {varname} getirilirse, varname değeri kapatılacak veya konumlandırılacak dosya tanımlayıcısını tanımlar. Örneğin:

... 2>&1

dosya tanımlayıcısı 2'nin, dosya tanımlayıcısı 1'in bir kopyası olarak yazma amacıyla açılacağı anlamına gelir ve

exec {n}<dosya

dosya (file) adlı dosyanın okuma için açılması ve dosya tanımlayıcı numarasının n değişkeninde saklanması anlamına gelir.

Yönlendirmelerin belirtilme sırası önemlidir. Kabuk her yönlendirmeyi, değerlendirme anındaki (dosya tanımlayıcısı, dosya) ilişkisi açısından değerlendirir. Örneğin:

... 1>fname 2>&1

önce dosya tanımlayıcısı 1'i fname dosyasıyla ilişkilendirir. Ardından dosya tanımlayıcısı 2'yi, dosya tanımlayıcısı 1 ile ilişkili olan dosyayla (yani fname) ilişkilendirir. Yönlendirmelerin sırası tersine çevrilmiş olsaydı, dosya tanımlayıcısı 2 terminalle ilişkilendirilecek (dosya tanımlayıcısı 1'in terminalle ilişkili olduğu varsayımıyla) ve ardından dosya tanımlayıcısı 1 fname dosyasıyla ilişkilendirilecekti.

Bir komutu & takip ediyorsa ve iş denetimi (job control) aktif değilse, komut için varsayılan standart girdi boş dosya olan /dev/null'dur. Aksi takdirde, bir komutun yürütülmesi için gereken ortam, girdi/çıktı özellikleri tarafından değiştirildiği şekliyle, çağıran kabuğun dosya tanımlayıcılarını içerir.

Ortam (Environment). Ortam (bkz. environ(7)), yürütülen bir programa normal bir bağımsız değişken listesiyle aynı şekilde aktarılan ad-değer çiftlerinin bir listesidir. Adlar tanımlayıcı olmalı ve değerler karakter dizgelerinden oluşmalıdır. Kabuk ortamla birkaç şekilde etkileşime girer. Kabuk başlatıldığında ortamı tarar ve bulunan her ad için bir değişken oluşturarak buna karşılık gelen değeri ve öznitelikleri verir ve bunu dışa aktarma (export) olarak işaretler. Yürütülen komutlar ortamı miras alır. Kullanıcı bu değişkenlerin değerlerini değiştirirse veya export ya da typeset -x komutlarını kullanarak yenilerini oluşturursa, bunlar ortamın bir parçası haline gelir. Bu nedenle, yürütülen herhangi bir komut tarafından görülen ortam; başlangıçta kabuk tarafından miras alınan, değerleri mevcut kabuk tarafından değiştirilebilen ad-değer çiftleri ile export veya typeset -x komutlarında belirtilmesi gereken eklemelerden oluşur.

Herhangi bir basit-komut veya işlevin ortamı, önüne bir veya daha fazla değişken ataması getirilerek genişletilebilir. Bir değişken atma bağımsız değişkeni, tanımlayıcı=değer biçiminde bir sözcüktür. Böylece:

TERM=450 cmd args ve (export TERM; TERM=450; cmd args)

(aşağıda listelenen ve önlerine bir kama işareti † getirilen özel yerleşik komutlar hariç olmak üzere, cmd'nin yukarıdaki yürütülmesi açısından) eşdeğerdir.

Kullanımdan kaldırılmış -k seçeneği ayarlanırsa, komut adından sonra gelseler bile tüm değişken atama bağımsız değişkenleri ortama yerleştirilir. Aşağıdaki komut dizisi önce a=b c ve ardından c yazdırır:

echo a=b c set -k echo a=b c Bu özellik kabuğun ilk sürümleri için yazılmış betiklerle kullanılmak üzere tasarlanmıştır ve yeni betiklerde kullanılması kesinlikle önerilmez. Bir gün tamamen kaldırılması muhtemeldir.

İşlevler (Functions). Tarihsel nedenlerden dolayı, yukarıdaki Komutlar bölümünde açıklanan name() sözdizimi ve function name sözdizimi olmak üzere işlevleri tanımlamanın iki yolu vardır. Kabuk işlevleri okunur ve dahili olarak saklanır. Takma adlar (alias), işlev okunduğunda çözümlenir. İşlevler, bağımsız değişkenleri konumsal parametreler olarak aktarılarak komutlar gibi yürütülür. (Aşağıdaki Yürütme bölümüne bakın.)

function name sözdizimiyle tanımlanan ve adıyla çağrılan işlevler, çağıranla aynı süreçte yürütülür ve tüm dosyaları ile mevcut çalışma dizinini çağıranla paylaşır. Çağıran tarafından yakalanan trap'ler (yakalama eylemleri), işlev içinde varsayılan eylemlerine sıfırlanır. İşlev tarafından yakalanmayan veya yoksayılmayan bir trap durumu, işlevin sonlanmasına ve durumun çağırana aktarılmasına neden olur. Bir işlevin içinde ayarlanan EXIT üzerindeki bir trap, işlev tamamlandıktan sonra çağıranın ortamında yürütülür. Normal şartlarda, değişkenler çağıran program ile işlev arasında paylaşılır. Ancak, bir işlev içinde kullanılan özel yerleşik typeset komutu, kapsamı geçerli işlevi içeren yerel (local) değişkenleri tanımlar. Çağrıdan önceki değişken atama listesinde çağırdıkları işlevlere veya ad referansı olarak aktarılan bağımsız değişkenler olarak aktarılabilirler. İşlevler içindeki hatalar denetimi çağırana geri döndürür.

name() sözdizimi ile tanımlanan işlevler ve özel yerleşik . ile çağrılan function name sözdizimi ile tanımlanan işlevler çağıranın ortamında yürütülür ve tüm değişkenleri ile trap'leri çağıranla paylaşır. Bu işlevlerin yürütülmesindeki hatalar, onları içeren betiğin iptal edilmesine (abort) neden olur.

Özel yerleşik return komutu, işlev çağrılarından geri dönmek için kullanılır.

İşlev adları, özel yerleşik typeset komutunun -f veya +f seçeneği ile listelenebilir. Mevcut olduğunda işlevlerin metni de -f ile listelenecektir. İşlevler, özel yerleşik unset komutunun -f seçeneği ile tanımsız (unset) hale getirilebilir.

Normal şartlarda, kabuk bir kabuk betiği yürüttüğünde işlevlerin tanımı kaldırılır (unset). Kabuğun ayrı çağrıları arasında tanımlanması gereken işlevler bir dizine yerleştirilmeli ve FPATH değişkeni bu dizinin adını içermelidir. ENV dosyasında da belirtilebilirler.

Disiplin İşlevleri (Discipline Functions). Her değişken, kendisiyle ilişkilendirilmiş sıfır veya daha fazla disiplin işlevine sahip olabilir. Kabuk başlangıçta get, set, append ve unset disiplin adlarını anlar ancak yeni türler tanımlanırken yenileri eklenebilir. Çoğu sistemde, yerleşik (builtin) yardımcı programı tarafından sağlanan C programlama arayüzü uzantısı aracılığıyla çalışma zamanında başkaları da eklenebilir. Bir değişken için get disiplini tanımlanmışsa, verilen değişkene her başvurulduğunda çağrılır. Disiplin işlevi içinde .sh.value değişkenine bir değer atanırsa, başvurulan değişken bunun yerine bu değeri alacaktır. Bir değişken için set disiplini tanımlanmışsa, verilen değişkene her değer atandığında çağrılır. Bir değişken için append disiplini tanımlanmışsa, verilen değişkenin sonuna her değer eklendiğinde çağrılır. Disiplin çağrılmadan önce .sh.value değişkenine değişkenin değeri verilir ve disiplin tamamlandıktan sonra değişkene .sh.value değeri atanır. Disiplin içinde .sh.value tanımsız (unset) yapılırsa, o değer değişmeden kalır. Bir değişken için unset disiplini tanımlanmışsa, verilen değişken her tanımsız (unset) yapıldığında çağrılır. Bu disiplin işlevi içinden açıkça tanımsız yapılmadığı sürece değişken tanımsız yapılmayacaktır.

.sh.name değişkeni, disiplin işlevinin çağrıldığı değişkenin adını içerir; .sh.subscript değişkenin alt simgesidir ve .sh.value, set disiplin işlevi içinde atanan değeri içerecektir. Değişken _, varsa alt simge de dahil olmak üzere değişkene bir referanstır. set disiplini için, .sh.value değerini değiştirmek atanan değeri de değiştirecektir. Son olarak, name bir disiplinin adı olduğunda ve bu adda bir değişken bulunmadığında, ${var.name} açılımı, ${ var.name;} komut ikamesine eşdeğerdir.

Ad Alanları (Name Spaces). Bir namespace komutunun listesinin bir parçası olarak yürütülen ve değişkenleri değiştiren veya yenilerini oluşturan komutlar ve işlevler, adı önünde . bulunan identifier tarafından verilen ad alanının adı olan yeni bir değişken oluşturur. name adındaki bir değişkene başvurulduğunda, ilk olarak .identifier.name kullanılarak aranır. Benzer şekilde, namespace listesindeki bir komut tarafından tanımlanan bir işlev, önünde . bulunan ad alanı adı kullanılarak oluşturulur.

Bir namespace komutunun listesi başka bir namespace komutu içerdiğinde, oluşturulan değişkenlerin ve işlevlerin adları, önünde her biri . ile başlayan tanımlayıcılar (identifiers) listesi bulunan değişken veya işlev adından oluşur.

Bir ad alanının dışında, bir ad alanı içinde oluşturulan bir değişkene veya işleve, önüne ad alanı adı getirilerek başvurulabilir.

Varsayılan olarak, .sh ile başlayan değişkenler sh ad alanındadır.

Tür Değişkenleri (Type Variables). Tür atanmış değişkenler (typed variables), veri yapıları ve nesneler oluşturmak için bir yol sağlar. Bir tür; paylaşılan bir kütüphane tarafından, aşağıda açıklanan yerleşik enum komutuyla veya yerleşik typeset komutunun yeni

  • -T seçeneği kullanılarak: tanımlanabilir. typeset komutunun -T seçeneğiyle, -T seçeneğine bir bağımsız değişken olarak belirtilen tür adı, türü tanımlayan bileşik bir değişken atamasıyla ayarlanır. İşlev tanımları bileşik değişken ataması içinde görünebilir ve bunlar bu tür için disiplin işlevleri haline gelir ve türün her bir örneği (instance) tarafından çağrılabilir veya yeniden tanımlanabilir. create işlev adı özel olarak değerlendirilir. Oluşturulan türün her bir örneği için çağrılır ancak miras alınmaz ve her bir örnek için yeniden tanımlanamaz.

Bir tür tanımlandığında, o adda özel yerleşik bir komut eklenir. Bu yerleşikler bildirim komutlarıdır ve aşağıda tanımlanan ve önlerinde †† bulunan tüm özel yerleşik komutlarla aynı açılım kurallarını takip eder. Bu komutlar daha sonra daha ileri tür tanımları içinde kullanılabilir. Bu komutlar için kılavuz sayfası (man page),

  • --man seçeneği veya getopts ile açıklanan diğer -- seçeneklerinden herhangi biri: kullanılarak üretilebilir. typeset komutunun -r, -a, -A, -h ve -S seçeneklerine bu yeni yerleşiklerin her biriyle izin verilir. Bir türün örneği, tür adının ardından bir veya daha fazla örnek adı çağrılarak oluşturulur. Türün her bir örneği, -S seçeneği ile tanımlanan alt değişkenler hariç olmak üzere alt değişkenlerin bir kopyası ile başlatılır. -S ile tanımlanan değişkenler, türün tüm örnekleri tarafından paylaşılır. Her örnek herhangi bir alt değişkenin değerini değiştirebilir ve ayrıca tür tanımı tarafından tanımlananlarla aynı adlara sahip yeni disiplin fonksiyonlarının yanı sıra herhangi bir standart disiplin adını da tanımlayabilir. Herhangi bir örnek için ek alt değişken tanımlanamaz.

Bir tür tanımlanırken, bir alt değişkenin değeri ayarlanmamışsa ve -r özniteliği belirtilmişse, bu durum alt değişkenin gerekli bir alt değişken olmasına neden olur. Bir türün bir örneği ne zaman oluşturulsa, tüm gerekli alt değişkenlerin belirtilmesi gerekir. Bu alt değişkenler her örnekte salt okunur (readonly) hale gelir.

Bir tür içindeki bir alt değişkende unset çağrıldığında ve bu alan için -r özniteliği belirtilmemişse, değer türle ilişkili varsayılan değere sıfırlanır. Başka bir tür içinde yer almayan bir tür örneğinde unset çağrılması, tüm alt değişkenleri ve değişkenin kendisini siler.

Bir tür tanımı, ilk alt değişken adı _ olarak tanımlanarak ve türü taban tür (base type) olarak tanımlanarak başka bir tür tanımından türetilebilir. Kalan tanımlar, yeni türe uygulanan eklemeler ve değişiklikler olacaktır. Yeni tür adı taban türün adıyla aynıysa, tür değiştirilecek ve orijinal türe artık erişilemeyecektir.

-T seçeneğine sahip olan ve herhangi bir seçenek argümanı veya işleneni bulunmayan typeset komutu, tüm tür tanımlarını, tüm bu türleri oluşturmak üzere okunabilecek bir biçimde standart çıktıya yazacaktır.

İşler. Set komutunun monitor seçeneği açılırsa, etkileşimli bir kabuk her boru hattı (pipeline) ile bir işi ilişkilendirir. Jobs komutu tarafından yazdırılan güncel işlerin bir tablosunu tutar ve bunlara küçük tam sayı numaraları atar. Bir iş & ile eşzamansız olarak başlatıldığında, kabuk şuna benzer bir satır yazdırır:

[1] 1234

bu satır, eşzamansız olarak başlatılan işin 1 numaralı iş olduğunu ve işlem kimliği (process id) 1234 olan bir adet (üst düzey) işleme sahip olduğunu gösterir.

Bu paragraf ve bir sonraki paragraf, UNIX'in tüm sürümlerinde bulunmayan ve geçerli olmayabilecek özellikler gerektirir. Eğer bir iş çalıştırıyorsanız ve başka bir şey yapmak istiyorsanız, geçerli işe bir STOP sinyali gönderen ^Z (control-Z) tuşuna basabilirsiniz. Kabuk normalde işin Durdurulduğunu (Stopped) belirtecek ve başka bir istem (prompt) yazdıracaktır. Daha sonra bg komutu ile bu işi arka plana alarak durumunu değiştirebilir veya başka komutlar çalıştırıp en sonunda fg ön plan komutu ile işi tekrar ön plana getirebilirsiniz. ^Z anında etki eder ve yazıldığında bekleyen çıktının ve okunmamış girdinin atılması bakımından bir kesme (interrupt) gibidir.

Arka planda çalıştırılan bir iş, terminalden okuma yapmaya çalışırsa duracaktır. Arka plan işlerinin normalde çıktı üretmesine izin verilir, ancak bu durum stty tostop komutu verilerek devre dışı bırakılabilir. Bu tty seçeneğini ayarlarsanız, arka plan işleri tıpkı girdi okumaya çalıştıklarında olduğu gibi çıktı üretmeye çalıştıklarında da duracaktır.

Bir iş havuzu (job pool), bir adla ilişkilendirilmiş list & ile başlatılan işler topluluğudur.

Kabukta işlere başvurmanın birkaç yolu vardır. Bir işe, işin herhangi bir işleminin işlem kimliği (process id) ile veya aşağıdakilerden biriyle başvurulabilir: %number Verilen numaraya sahip iş. pool pool ile adlandırılan iş havuzundaki tüm işler. pool.number pool ile adlandırılan iş havuzundaki number numaralı iş. %string Komut satırı string ile başlayan herhangi bir iş. %?string Komut satırı string içeren herhangi bir iş. %% Mevcut iş. %+ %% ile eşdeğerdir. %- Önceki iş. Ek olarak, aksi belirtilmedikçe, bir işin belirtilebildiği her yerde, bir arka plan iş havuzunun adı o havuzdaki tüm işleri temsil etmek için kullanılabilir.

Kabuk, bir işlemin durumu her değiştiğinde bunu hemen öğrenir. Normalde, bir iş bloke olduğunda ve daha fazla ilerleme mümkün olmadığında sizi bilgilendirir, ancak bunu yalnızca bir istem yazdırmadan hemen önce yapar. Bu, çalışmanızı başka türlü rahatsız etmemek için yapılır. set komutunun notify seçeneği, kabuğun bu iş değişikliği mesajlarını gerçekleşir gerçekleşmez yazdırmasına neden olur.

Monitor seçeneği açık olduğunda, tamamlanan her arka plan işi, CHLD için ayarlanmış herhangi bir tuzağı (trap) tetikler.

İşler çalışken veya durdurulmuşken kabuktan çıkmaya çalıştığınızda, Durdurulmuş (çalışan) işleriniz var. (You have stopped(running) jobs.) şeklinde uyarılırsınız. Bunların ne olduğunu görmek için jobs komutunu kullanabilirsiniz. Hemen tekrar çıkmaya çalışırsanız, kabuk sizi ikinci kez uyarmaz ve durdurulan işler sonlandırılır. Bir oturum açma kabuğu (login shell) bir HUP sinyali aldığında, aşağıda açıklanan yerleşik disown komutuyla sahipliği kaldırılmamış (disowned) olan her işe bir HUP sinyali gönderir.

Sinyaller. Çağrılan bir komut için INT ve QUIT sinyalleri, komutun ardından & geliyorsa ve monitor seçeneği etkin değilse yoksayılır. Aksi takdirde sinyaller, kabuk tarafından ebeveyninden devralınan değerlere sahip olur (ancak aşağıdaki yerleşik trap komutuna da bakın).

Yürütme. Bir komut her okunduğunda yukarıdaki ikameler gerçekleştirilir. Komut adı aşağıda listelenen Özel Yerleşik Komutlardan (Special Built-in Commands) biriyle eşleşirse, mevcut kabuk işlemi içinde yürütülür. Ardından, komut adının kullanıcı tanımlı bir fonksiyonla eşleşip eşleşmediği kontrol edilir. Eşleşiyorsa, konumsal parametreler (positional parameters) kaydedilir ve ardından fonksiyon çağrısının argümanlarına sıfırlanır. Bir fonksiyon da mevcut kabuk işlemi içinde yürütülür. Fonksiyon tamamlandığında veya bir return (dönüş) verdiğinde, konumsal parametre listesi geri yüklenir. function ad sözdizimi ile tanımlanan fonksiyonlar için, fonksiyon içinde EXIT üzerine ayarlanmış tüm tuzaklar (trap) yürütülür. Bir fonksiyonun çıkış değeri, yürütülen son komutun değeridir. Eğer bir komut adı bir özel yerleşik komut veya kullanıcı tanımlı bir fonksiyon değilse, ancak aşağıda listelenen yerleşik komutlardan biriyse, mevcut kabuk işlemi içinde yürütülür.

Kabuk değişkenleri PATH ve ardından gelen FPATH değişkeni, komut adını aramak için dizin listesini tanımlar. Alternatif dizin adları iki nokta üst üste (:) ile ayrılır. Varsayılan yol /bin:/usr/bin: şeklindedir (sırasıyla /bin, /usr/bin ve geçerli dizini belirtir). Geçerli dizin, yan yana iki veya daha fazla iki nokta üst üste ile veya yol listesinin başındaki veya sonundaki bir iki nokta üst üste ile belirtilebilir. Eğer komut adı bir / içeriyorsa, arama yolu kullanılmaz. Aksi takdirde, PATH ve FPATH tarafından tanımlanan dizin listesindeki her dizin sırayla kontrol edilir. Aranan dizin FPATH içinde yer alıyorsa ve aranan komutla adı eşleşen bir dosya içeriyorsa, bu dosya, yalnızca önceden ayarlanmış takma adların (aliases) genişletilmesi hariç olmak üzere, . komutunun argümanıymış gibi mevcut kabuk ortamına yüklenir ve verilen addaki bir fonksiyon yukarıda açıklandığı gibi yürütülür.

Bu dizin FPATH içinde değilse, kabuk öncelikle verilen bir yol adına (pathname) karşılık gelen yerleşik (built-in) bir komut sürümünün olup olmadığını belirler ve varsa bu sürüm mevcut işlemde çağrılır. Hiçbir yerleşik komut bulunamazsa, kabuk bu dizinde .paths adında bir dosya olup olmadığını kontrol eder. Dosya bulunursa ve FPATH=yol biçiminde bir satır varsa (burada yol mevcut bir dizini adlandırır), o zaman o dizin, FPATH değişkeninde bulunmuş gibi geçerli dizinden hemen sonra aranır. Eğer yol / ile başlamıyorsa, aranan dizine göre göreceli olarak kontrol edilir.

Daha sonra .paths dosyasında PLUGIN_LIB=libname [ : libname ] ... biçiminde bir satır olup olmadığı kontrol edilir. libname ile adlandırılan her kütüphane, builtin -f komutuna bir seçenek argümanıymış gibi aranır ve belirtilen adda yerleşik bir komut içeriyorsa, bu adla bir komut yerine bu yürütülür. Bu şekilde bulunan bir kütüphaneden yüklenen herhangi bir yerleşik komut, .paths dosyasını içeren dizinle ilişkilendirilir, böylece yalnızca daha önceki bir dizinde bulunamazsa yürütülür.

Son olarak, dizinde verilen adda bir dosya olup olmadığı kontrol edilecektir. Eğer dosya yürütme iznine sahipse ancak bir a.out dosyası değilse, kabuk komutları içeren bir dosya olduğu varsayılır. Bunu okumak için ayrı bir kabuk başlatılır. Bu durumda dışa aktarılmamış (non-exported) tüm değişkenler kaldırılır. Eğer kabuk komut dosyasının okuma izni yoksa veya dosya üzerinde setuid ve/veya setgid bitleri ayarlanmışsa, kabuk, görevi izinleri ayarlamak ve kabuğu açık bir dosya olarak aktarılan kabuk komut dosyasıyla yürütmek olan bir aracı (agent) yürütür. Eğer .paths dosyasının birinci veya ikinci satırında name=value biçiminde bir satır varsa, ortam değişkeni name, value tarafından belirtilen dizin dizin listesinin başına eklenmesiyle değiştirilir. Eğer value mutlak bir dizin değilse, yürütülebilir dosyanın bulunduğu dizine göre göreceli bir dizini belirtir. name ortam değişkeni zaten mevcut değilse, belirtilen komut için ortam listesine eklenecektir. Parantez içindeki bir komut, dışa aktarılmamış değişkenler kaldırılmadan bir alt kabukta (sub-shell) yürütülür.

Komutların Yeniden Girilmesi. Bir terminal aygıtından girilen son HISTSIZE (varsayılan 512) komutun metni bir geçmiş dosyasında (history file) saklanır. HISTFILE değişkeni ayarlanmamışsa veya adlandırdığı dosya yazılabilir değilse $HOME/.sh_history dosyası kullanılır. Bir kabuk, aynı adlandırılmış HISTFILE dosyasını kullanan tüm etkileşimli kabukların komutlarına erişebilir. Yerleşik hist komutu, bu dosyanın bir bölümünü listelemek veya düzenlemek için kullanılır. Düzenlenecek veya listelenecek dosya bölümü numarayla veya komutun ilk karakteri veya karakterleri verilerek seçilebilir. Tek bir komut veya bir komut aralığı belirtilebilir. hist komutuna bağımsız değişken olarak bir düzenleyici (editor) programı belirtmezseniz HISTEDIT değişkeninin değeri kullanılır. HISTEDIT ayarlanmamışsa, artık kullanılmayan (obsolete) FCEDIT değişkeni kullanılır. FCEDIT tanımlı değilse, /bin/ed kullanılır. Düzenlenen komut(lar) yazdırılır ve yazmadan çıkmadığınız sürece düzenleyiciden çıkıldığında yeniden yürütülür. Düzenleme aşamasını atlamak ve komutu yeniden yürütmek için -s seçeneği (ve eski sürümlerde - düzenleyici adı) kullanılır. Bu durumda, yürütmeden önce komutu değiştirmek için eski=yeni (old=new) biçiminde bir ikame parametresi kullanılabilir. Örneğin, ′hist -s′ komutuna kısayol olan önceden ayarlanmış r takma adı ile r bad=good c yazılması, c harfiyle başlayan en son komutu, bad dizgesinin ilk geçtiği yeri good dizgesi ile değiştirerek yeniden yürütecektir.

Satır İçi Düzenleme Seçenekleri. Normalde, bir terminal aygıtından girilen her komut satırı sadece yazılır ve ardından yeni satır (RETURN veya LINE FEED) gelir. Eğer emacs, gmacs veya vi seçeneklerinden biri etkinse, kullanıcı komut satırını düzenleyebilir. Bu düzenleme modlarından herhangi birinde olmak için ilgili seçeneği ayarlayın. VISUAL veya EDITOR değişkenine bu seçenek adlarından biriyle biten bir değer atandığında, her seferinde bir düzenleme seçeneği otomatik olarak seçilir.

Düzenleme özellikleri, kullanıcının terminalinin RETURN karakterini satır beslemesiz (without line feed) satır başı (carriage return) olarak kabul etmesini ve bir boşluğun ( ) ekrandaki geçerli karakterin üzerine yazmasını gerektirir.

multiline seçeneği açık olmadığı sürece, düzenleme modları kullanıcının bir pencereden geçerli satıra baktığı bir konsepti uygular. Pencere genişliği, tanımlanmışsa COLUMNS değeri, aksi takdirde 80'dir. Pencere genişliği istemi (prompt) görüntülemek ve girdi girmek için en az 8 sütun bırakmak için çok küçükse, istem soldan kesilir. Satır, pencere genişliği eksi ikiden uzunsa, kullanıcıyı bilgilendirmek için pencerenin sonunda bir işaret görüntülenir. İmleç hareket edip pencere sınırlarına ulaştıkça, pencere imlecin etrafında merkezlenecektir. Satır pencerenin sağ (sol, her iki) tarafına (taraflarına) doğru uzanıyorsa işaret > (<, *) şeklindedir.

Her düzenleme modundaki arama komutları geçmiş dosyasına erişim sağlar. Dizgedeki baştaki bir ^ işareti eşleşmenin satırdaki ilk karakterden başlamasını sınırlasa da, kalıplar (patterns) değil, yalnızca dizgeler (strings) eşleştirilir.

Düzenleme modlarının her biri, kısmen girilmiş bir kelimeyle eşleşen dosyaları veya komutları listelemek için bir işleme sahiptir. Satırdaki ilk kelimeye veya ;, ⎪, &, veya ( karakterinden sonraki ilk kelimeye uygulandığında ve kelime ∼ ile başlamıyorsa veya bir / içermiyorsa, PATH değişkeni tarafından tanımlanan ve kısmi kelimeyle eşleşebilecek takma adlar (aliases), fonksiyonlar ve yürütülebilir komutların listesi görüntülenir. Aksi takdirde, verilen kelimeyle eşleşen dosyaların listesi görüntülenir. Kısmen girilen kelime herhangi bir dosya genişletme karakteri içermiyorsa, bu listeler oluşturulmadan önce sonuna bir * eklenir. Oluşturulan liste görüntülendikten sonra giriş satırı yeniden çizilir. Bu işlemler sırasıyla komut adı listeleme (command name listing) ve dosya adı listeleme (file name listing) olarak adlandırılır. Eşleşen komutların veya dosyaların listesini hesaplayan, ancak listeyi yazdırmak yerine geçerli kelimeyi tam veya kısmi bir eşleşmeyle değiştiren, komut adı tamamlama (command name completion) ve dosya adı tamamlama (file name completion) olarak adlandırılan ek işlemler vardır. Dosya adı tamamlama için, eşleşme benzersizse, dosya bir dizin ise sonuna bir /, dosya bir dizin değilse bir boşluk eklenir. Aksi takdirde, eşleşen tüm dosyalar için en uzun ortak önek kelimenin yerini alır. Komut adı tamamlama için, en uzun komut öneğini bulmak amacıyla dosya adlarının yalnızca son / karakterinden sonraki kısmı kullanılır. Bu önekle yalnızca tek bir ad eşleşiyorsa, kelime komut adı ve ardından gelen bir boşlukla değiştirilir. Benzersiz bir eşleşme sağlamayan bir tamamlama için tab (sekme) tuşu kullanıldığında, sonraki bir tab tuşu eşleşen alternatiflerin numaralandırılmış bir listesini sağlayacaktır. Seçim numarası girilip ardından tab tuşuna basılarak belirli bir seçim yapılabilir.

Tuş Atamaları. KEYBD tuzağı (trap), tuşlar yazılırken onları yakalamak ve kabuk tarafından gerçekten görülen karakterleri değiştirmek için kullanılabilir. Bu tuzak, bir terminalden okuma yapılırken her karakter (veya ilk karakter ESC olduğunda karakter dizisi) girildikten sonra yürütülür. .sh.edchar değişkeni, tuzağı oluşturan karakteri veya karakter dizisini içerir. Tuzak eyleminde .sh.edchar değerinin değiştirilmesi, kabuğun orijinal değer yerine yeni değer klavyeden girilmiş gibi davranmasına neden olur.

.sh.edcol değişkeni, giriş anında imlecin giriş sütun numarasına ayarlanır. .sh.edmode değişkeni, vi ekleme (insert) modundayken (aşağıya bakın) ESC olarak ayarlanır ve aksi takdirde boştur. .sh.edchar değişkenine atanan bir değerin başına ${.sh.editmode} eklenmesi, zaten bu modda değilse kabuğun kontrol moduna geçmesine neden olur.

Bu tuzak, düzenleme yönergelerine bağımsız değişken olarak girilen karakterler için veya bir karakter araması için giriş okunurken çağrılmaz.

Emacs Düzenleme Modu. Bu moda emacs veya gmacs seçeneklerinden biri etkinleştirilerek girilir. Bu iki mod arasındaki tek fark, ^T karakterini ele alma şekilleridir. Düzenleme yapmak için kullanıcı imleci düzeltilmesi gereken noktaya getirir ve ardından gerektiği gibi karakterler veya kelimeler ekler veya siler. Tüm düzenleme komutları kontrol karakterleri veya kaçış (escape) dizileridir. Kontrol karakterlerinin gösterimi şapka (^) işareti ve ardından gelen karakter şeklindedir. Örneğin, ^F, control F gösterimidir. Bu, CTRL (control) tuşu basılı tutulurken f tuşuna basılarak girilir. SHIFT tuşuna basılmaz. (^? gösterimi DEL (delete) tuşunu belirtir.)

Kaçış dizilerinin gösterimi M- ve ardından gelen bir karakter şeklindedir. Örneğin, M-f (Meta f olarak okunur) ESC (ascii 033) ve ardından f tuşuna basılarak girilir. (M-F gösterimi, ESC ve ardından gelen SHIFT (büyük) F için olacaktır.)

Tüm düzenleme komutları satırın herhangi bir yerinden (yalnızca başından değil) çalışır. Belirtilen durumlar dışında, düzenleme komutlarından sonra ne RETURN ne de LINE FEED tuşuna basılır.

^F İmleci bir karakter ileriye (sağa) taşır. M-[C İmleci bir karakter ileriye (sağa) taşır. M-f İmleci bir kelime ileriye taşır. (Emacs düzenleyicisine göre bir kelime, yalnızca harfler, rakamlar ve alt çizgilerden oluşan bir karakter dizisidir.) ^B İmleci bir karakter geriye (sola) taşır. M-[D İmleci bir karakter geriye (sola) taşır. M-b İmleci bir kelime geriye taşır. ^A İmleci satırın başına taşır. M-[H İmleci satırın başına taşır. ^E İmleci satırın sonuna taşır. M-[Y İmleci satırın sonuna taşır. ^]char İmleci mevcut satırdaki char karakterine doğru ileriye taşır. M-^]char İmleci mevcut satırdaki char karakterine doğru geriye taşır. ^X^X İmleç ile işareti yer değiştirir. erase (stty(1) komutu tarafından tanımlanan kullanıcı tanımlı silme karakteri, genellikle ^H veya #.) Önceki karakteri siler. lnext (stty(1) komutu tarafından tanımlanan kullanıcı tanımlı bir sonraki harfi harfine karakter veya tanımlanmamışsa ^V.) Bir sonraki karakterin düzenleme özelliklerini (varsa) kaldırır. ^D Geçerli karakteri siler. M-d Geçerli kelimeyi siler. M-^H (Meta-backspace) Önceki kelimeyi siler. M-h Önceki kelimeyi siler. M-^? (Meta-DEL) Önceki kelimeyi siler (kesme karakteriniz ^? (varsayılan olarak DEL) ise bu komut çalışmayacaktır). ^T Emacs modunda geçerli karakter ile önceki karakterin yerini değiştirir ve imleci ilerletir. Gmacs modunda önceki iki karakterin yerini değiştirir. ^C Geçerli karakteri büyük harf yapar. M-c Geçerli kelimenin ilk harfini büyük yapar. M-l Geçerli kelimeyi küçük harfe dönüştürür. ^K İmleçten satırın sonuna kadar olan kısmı siler. Değeri geçerli imleç konumundan daha küçük olan sayısal bir parametreden önce geliyorsa, verilen konumdan imlece kadar olan kısmı siler. Değeri geçerli imleç konumundan daha büyük olan sayısal bir parametreden önce geliyorsa, imleçten verilen imleç konumuna kadar olan kısmı siler. ^W İmleçten işarete kadar olan bölgeyi siler (kill). M-p İmleçten işarete kadar olan bölgeyi yığına (stack) iter. kill (stty komutu tarafından tanımlanan kullanıcı tanımlı satır silme (kill) karakteri, genellikle ^G veya @.) Geçerli satırın tamamını siler. Art arda iki kill karakteri girilirse, o andan itibaren tüm kill karakterleri satır beslemeye (line feed) neden olur (kağıt terminaller kullanırken yararlıdır). ^Y Satırdan kaldırılan son öğeyi geri yükler. (Öğeyi satıra geri çeker/yank.) ^L Satır besleme yapar ve geçerli satırı yazdırır. M-^L Ekranı temizler. ^@ (Null karakteri) İşaret koyar (set mark). M-space (Meta boşluk) İşaret koyar (set mark). ^J (Yeni satır) Geçerli satırı yürütür. ^M (Satır başı) Geçerli satırı yürütür. eof Dosya sonu (End-of-file) karakteri, normalde ^D, yalnızca geçerli satır boş (null) ise dosya sonu olarak işlenir. ^P Önceki komutu getirir. ^P her girildiğinde geçmişteki bir önceki komuta erişilir. Çok satırlı bir komutun ilk satırında olunmadığında bir satır geriye gider. M-[A İmleç satırın sonundaysa, string değeri geçerli satırın içeriğine ayarlanmış ^R komutuna eşdeğerdir. Aksi takdirde ^P komutuna eşdeğerdir. M-< En eski (en geçmişteki) geçmiş satırını getirir. M-> En yeni (en güncel) geçmiş satırını getirir. ^N Bir sonraki komut satırını getirir. ^N her girildiğinde zaman içindeki bir sonraki komut satırına erişilir. M-[B ^N ile eşdeğerdir. ^Rstring Geçmişte string içeren bir önceki komut satırı için geriye doğru arama yapar. Sıfır parametresi verilirse arama ileriye doğrudur. String, bir RETURN veya NEW LINE ile sonlandırılır. Eğer string ifadesinin önünde bir ^ varsa, eşleşen satır string ile başlamalıdır. Eğer string belirtilmezse, en son aranan string ifadesini içeren bir sonraki komut satırına erişilir. Bu durumda sıfır parametresi arama yönünü tersine çevirir. ^O Çalıştır (Operate) - Geçerli satırı yürütür ve geçmiş dosyasından geçerli satıra göre bir sonraki satırı getirir. M-digits (Kaçış) Sayısal parametre tanımlar, rakamlar bir sonraki komut için bir parametre olarak alınır. Parametre kabul eden komutlar ^F, ^B, erase, ^C, ^D, ^K, ^R, ^P, ^N, ^], M-., M-^], M-_, M-=, M-b, M-c, M-d, M-f, M-h, M-l ve M-^H'dir. M-letter Yazılımsal tuş (Soft-key) - Takma ad (alias) listenizde _letter adında bir takma ad aranır ve bu adda bir takma ad tanımlanmışsa, değeri giriş kuyruğuna eklenir. Harf, yukarıdaki meta-fonksiyonlardan biri olmamalıdır. M-[letter Yazılımsal tuş (Soft-key) - Takma ad listenizde _letter adında bir takma ad aranır ve bu adda bir takma ad tanımlanmışsa, değeri giriş kuyruğuna eklenir. Bu, birçok terminalde fonksiyon tuşlarını programlamak için kullanılabilir. M-. Önceki komutun son kelimesini satıra ekler. Önünde sayısal bir parametre varsa, bu parametrenin değeri son kelime yerine hangi kelimenin ekleneceğini belirler. M- M-. ile aynıdır. M-* Geçerli kelime üzerinde dosya adı oluşturma (file name generation) dener. Kelime herhangi bir dosyayla eşleşmiyorsa veya herhangi bir özel kalıp karakteri içermiyorsa sonuna bir yıldız işareti eklenir. M-ESC Yukarıda açıklandığı gibi komut veya dosya adı tamamlama. ^I tab Yukarıda açıklandığı gibi komut veya dosya adı tamamlamayı dener. Kısmi bir tamamlama gerçekleşirse, bunun tekrarlanması M-= girilmiş gibi davranır. Eşleşme bulunamazsa veya boşluktan sonra girilirse, bir sekme (tab) eklenir. M-= Önünde sayısal bir parametre yoksa, yukarıda açıklandığı gibi eşleşen komutların veya dosya adlarının listesini oluşturur. Aksi takdirde, imlecin altındaki kelime, en son oluşturulan komut veya dosya listesinden sayısal parametrenin değerine karşılık gelen öğeyle değiştirilir. İmleç bir kelime üzerinde değilse, bunun yerine kelime eklenir. ^U Bir sonraki komutun parametresini 4 ile çarpar. \ Bir sonraki karakteri kaçış karakteri yapar (escape). Düzenleme karakterleri, kullanıcının silme (erase), sonlandırma (kill) ve kesme (interrupt) (normalde ^?) karakterleri, önlerinde bir \ varsa bir komut satırına veya bir arama dizgesine girilebilir. , bir sonraki karakterin düzenleme özelliklerini (varsa) kaldırır. M-^V Kabuk sürümünü görüntüler. M-# Satır bir # ile başlamıyorsa, satırın başına ve her yeni satırdan sonrasına bir # eklenir ve satır girilir. Bu, geçmiş dosyasına bir yorum eklenmesine neden olur. Satır bir # ile başlıyorsa, # silinir ve her yeni satırdan sonraki bir # de silinir.

Vi Düzenleme Modu. İki yazma modu vardır. Başlangıçta, bir komut girdiğinizde ekleme (input) modundasınızdır. Düzenlemek için kullanıcı ESC (033) yazarak kontrol moduna girer, imleci düzeltilmesi gereken noktaya taşır ve ardından gerektiği gibi karakter veya kelime ekler veya siler. Çoğu kontrol komutu, komuttan önce isteğe bağlı bir tekrarlama sayısını (repeat count) kabul eder.

Çoğu sistemde vi modundayken, başlangıçta kurallı işleme (canonical processing) etkindir ve hız 1200 baud veya daha yüksekse ve herhangi bir kontrol karakteri içeriyorsa veya istemin yazdırılmasından bu yana bir saniyeden az zaman geçmişse komut tekrar yankılanacaktır (echo). ESC karakteri, komutun geri kalanı için kurallı işlemeyi sonlandırır ve kullanıcı daha sonra komut satırını değiştirebilir. Bu şema, ham modun (raw mode) önceden yazma yankılaması (type-ahead echoing) ile kurallı işlemenin avantajlarına sahiptir.

viraw seçeneği de ayarlanmışsa, terminalde kurallı işleme her zaman devre dışı bırakılacaktır. Bu mod, iki alternatif satır sonu sınırlayıcısını desteklemeyen sistemler için örtüktür ve belirli terminaller için yararlı olabilir.

Girdi Düzenleme Komutları Varsayılan olarak düzenleyici ekleme (input) modundadır. erase (stty komutu tarafından tanımlanan kullanıcı tanımlı silme karakteri, genellikle ^H veya #.) Önceki karakteri siler. ^W Boşlukla ayrılmış önceki kelimeyi siler. Bazı sistemlerde bunun çalışması için viraw seçeneği gerekebilir. eof Satırın ilk karakteri olduğunda, ignoreeof seçeneği ayarlanmadığı sürece kabuğun sonlanmasına neden olur. Aksi takdirde bu karakter yoksayılır. lnext (stty(1) tarafından tanımlanan kullanıcı tanımlı bir sonraki harfi harfine karakter veya tanımlanmamışsa ^V.) Bir sonraki karakterin düzenleme özelliklerini (varsa) kaldırır. Bazı sistemlerde bunun çalışması için viraw seçeneği gerekebilir. \ Bir sonraki silme (erase) veya satır silme (kill) karakterini kaçırır (escape). ^I tab Yukarıda açıklandığı gibi komut veya dosya adı tamamlamayı dener ve ekleme moduna geri döner. Kısmi bir tamamlama gerçekleşirse, bunun tekrarlanması kontrol modundan = girilmiş gibi davranır. Eşleşme bulunamazsa veya boşluktan sonra girilirse, bir sekme (tab) eklenir. Hareket Düzenleme Komutları Bu komutlar imleci hareket ettirir. [count]l İmleci bir karakter ileriye (sağa) taşır. [count][C İmleci bir karakter ileriye (sağa) taşır. [count]w İmleci bir alfanümerik kelime ileriye taşır. [count]W İmleci boşluktan sonra gelen bir sonraki kelimenin başına taşır. [count]e İmleci kelimenin sonuna taşır. [count]E İmleci boşlukla sınırlandırılmış geçerli kelimenin sonuna taşır. [count]h İmleci bir karakter geriye (sola) taşır. [count][D İmleci bir karakter geriye (sola) taşır. [count]b İmleci bir kelime geriye taşır. [count]B İmleci boşlukla ayrılmış önceki kelimeye taşır. [count]⎪ İmleci count sütununa taşır. [count]fc Geçerli satırdaki bir sonraki c karakterini bulur. [count]Fc Geçerli satırdaki önceki c karakterini bulur. [count]tc f ve ardından h komutuna eşdeğerdir. [count]Tc F ve ardından l komutuna eşdeğerdir. [count]; Son tek karakter bulma komutunu (f, F, t veya T) count kez tekrarlar. [count], Son tek karakter bulma komutunu ters yönde count kez tekrarlar. 0 İmleci satırın başına taşır. ^ İmleci satırın başına taşır. [H İmleci satırdaki ilk boşluk olmayan karaktere taşır. $ İmleci satırın sonuna taşır. [Y İmleci satırın sonuna taşır. % Dengeleyici (, ), {, }, [, veya ] karakterine gider. İmleç yukarıdaki karakterlerden birinin üzerinde değilse, öncelikle satırın geri kalanı yukarıdaki karakterlerden birinin ilk geçtiği yer için aranır. Arama Düzenleme Komutları Bu komutlar komut geçmişinize erişir. [count]k Önceki komutu getirir. k her girildiğinde geçmişteki bir önceki komuta erişilir. [count]- k ile eşdeğerdir. [count][A İmleç satırın sonundaysa, string değeri geçerli satırın içeriğine ayarlanmış / komutuna eşdeğerdir. Aksi takdirde k ile eşdeğerdir. [count]j Bir sonraki komutu getirir. j her girildiğinde zaman içindeki bir sonraki komuta erişilir. [count]+ j ile eşdeğerdir. [count][B j ile eşdeğerdir. [count]G count numaralı komut getirilir. Varsayılan, en eski geçmiş komutudur. /string Geçmişte string içeren önceki bir komut için geriye doğru arama yapar. String, bir RETURN veya NEW LINE ile sonlandırılır. String ifadesinin önünde bir ^ varsa, eşleşen satır string ile başlamalıdır. String boş (null) ise, önceki string kullanılır. ?string Aramanın ileri yönde olması dışında / ile aynıdır. n / veya ? komutlarının son kalıbının bir sonraki eşleşmesini arar. N / veya ? komutlarının son kalıbının bir sonraki eşleşmesini ters yönde arar. Metin Değiştirme Düzenleme Komutları Bu komutlar satırı değiştirecektir. a Ekleme (input) moduna girer ve geçerli karakterden sonra metin ekler. A Satırın sonuna metin ekler. $a ile eşdeğerdir. [count]cmotion c[count]motion Geçerli karakterden başlayarak motion komutunun imleci taşıyacağı karaktere kadar olan kısmı siler ve ekleme moduna girer. Eğer motion c ise, tüm satır silinir ve ekleme moduna girilir. C Geçerli karakterden başlayarak satırın sonuna kadar olan kısmı siler ve ekleme moduna girer. c$ ile eşdeğerdir. S cc ile eşdeğerdir. [count]s Ekleme modunda imlecin altındaki karakterleri değiştirir. D Geçerli karakterden başlayarak satırın sonuna kadar olan kısmı siler. d$ ile eşdeğerdir. [count]dmotion d[count]motion Geçerli karakterden başlayarak motion komutunun imleci taşıyacağı karaktere kadar olan kısmı siler. Eğer motion d ise, tüm satır silinir. i Ekleme moduna girer ve geçerli karakterden önce metin ekler. I Satırın başlangıcından önce metin ekler. 0i ile eşdeğerdir. [count]P Önceki metin değişikliğini imleçten önce yerleştirir. [count]p Önceki metin değişikliğini imleçten sonra yerleştirir. R Ekleme moduna girer ve ekrandaki karakterleri üzerine yazma (overlay) şeklinde yazdığınız karakterlerle değiştirir. [count]rc Geçerli imleç konumundan başlayarak count adet karakteri c ile değiştirir ve imleci ilerletir. [count]x Geçerli karakteri siler. [count]X Önceki karakteri siler. [count]. Önceki metin değiştirme komutunu tekrarlar. [count]∼ Geçerli imleç konumundan başlayarak count adet karakterin harf büyüklüğünü tersine çevirir (büyükse küçük, küçükse büyük) ve imleci ilerletir. [count]_ Önceki komutun count numaralı kelimesinin eklenmesine ve ekleme moduna girilmesine neden olur. count belirtilmezse son kelime kullanılır.

  • Geçerli kelimenin sonuna bir * eklenmesine ve dosya adı oluşturulmasının (file name generation) denenmesine neden olur. Eşleşme bulunamazsa zil çalar. Aksi takdirde, kelime eşleşen kalıpla değiştirilir ve ekleme moduna girilir. \ Komut veya dosya adı tamamlama as described above. Diğer Düzenleme Komutları Çeşitli komutlar. [count]ymotion y[count]motion Geçerli karakterden başlayarak motion komutunun imleci taşıyacağı karaktere kadar olan kısmı kopyalar (yank) ve silme arabelleğine (delete buffer) koyar. Metin ve imleç değişmez. yy Satırın tamamını kopyalar. Y Geçerli konumdan satırın sonuna kadar kopyalar. y$ ile eşdeğerdir. u Son metin değiştirme komutunu geri alır (undo). U Satır üzerinde gerçekleştirilen tüm metin değiştirme komutlarını geri alır. [count]v Giriş arabelleğinde hist -e ${VISUAL:-${EDITOR:-vi}} count komutunu döndürür. count belirtilmezse geçerli satır kullanılır. ^L Satır besleme yapar ve geçerli satırı yazdırır. Yalnızca kontrol modunda etkilidir. ^J (Yeni satır) Moddan bağımsız olarak geçerli satırı yürütür. ^M (Satır başı) Moddan bağımsız olarak geçerli satırı yürütür.

Komutun ilk karakteri bir # ise, bu komut bu # karakterini ve bir yeni satırı takip eden her # karakterini siler. Aksi takdirde, komuttaki her satırın önüne bir # ekledikten sonra satırı gönderir. Geçerli satırın geçmişe bir yorum olarak eklenmesini sağlamak ve geçmiş dosyasındaki önceden yorum satırı haline getirilmiş komutların yorumunu kaldırmak için kullanışlıdır.

[count]= count belirtilmemişse, yukarıda açıklandığı gibi eşleşen komutların veya dosya adlarının listesini oluşturur. Aksi takdirde, imlecin altındaki kelime, en son oluşturulan komut veya dosya listesinden count numaralı öğeyle değiştirilir. İmleç bir kelime üzerinde değilse, bunun yerine eklenir. @letter Takma ad listenizde _letter adında bir takma ad aranır ve bu adda bir takma ad tanımlanmışsa, değeri işlenmek üzere giriş kuyruğuna eklenir. ^V Kabuk sürümünü görüntüler.

Yerleşik Komutlar. Aşağıdaki basit komutlar kabuk işlemi içinde yürütülür. Girdi/Çıktı (I/O) yönlendirmesine izin verilir. Aksi belirtilmedikçe, çıktı dosya tanımlayıcısı (file descriptor) 1'e yazılır ve sözdizimi hatası olmadığında çıkış durumu sıfırdır. :, true, false, echo, newgrp ve login hariç olmak üzere, tüm yerleşik komutlar seçeneklerin sonunu belirtmek için -- ifadesini kabul eder. Ayrıca --man seçeneğini standart hataya man sayfasını görüntüleme isteği ve -? seçeneğini standart hataya bir kullanım mesajı yazdıran bir yardım isteği olarak yorumlarlar. Önünde bir veya iki † simgesi bulunan komutlar özel yerleşik komutlardır (special built-in commands) ve aşağıdaki şekillerde özel olarak işlenirler:

  1. Komutun önünde gelen değişken atama listeleri, komut tamamlandığında da yürürlükte kalır.
    
  2. G/Ç (I/O) yönlendirmeleri değişken atamalarından sonra işlenir.
    
  3. Hatalar, bunları içeren bir betiğin (script) yarıda kesilmesine (abort) neden olur.
    
  4. Bunlar geçerli fonksiyon adları değildir.
    
  5. Önünde †† bulunan bir komuttan sonra gelen ve bir değişken ataması biçiminde olan kelimeler, bir değişken atamasıyla aynı kurallarla genişletilir. Bu, tilde ikamesinin = işaretinden sonra gerçekleştirildiği, alan bölme (field splitting) ve dosya adı oluşturma (file name generation) işlemlerinin gerçekleştirilmediği anlamına gelir. Bunlara bildirim yerleşikleri (declaration built-ins) denir.
    

† : [ arg ... ] Komut yalnızca parametreleri genişletir.

† . name [ arg ... ] Eğer name, function name ayrılmış sözcük sözdizimi ile tanımlanmış bir fonksiyon ise, fonksiyon mevcut ortamda yürütülür (sanki name() sözdizimi ile tanımlanmış gibi). Aksi takdirde, name bir dosyayı belirtiyorsa, dosya bütünüyle okunur ve komutlar mevcut kabuk ortamında yürütülür. Dosyayı içeren dizini bulmak için PATH tarafından belirtilen arama yolu kullanılır. Herhangi bir arg argümanı verilirse, bunlar . komutu işlenirken konumsal parametreler (positional parameters) haline gelir ve orijinal konumsal parametreler tamamlandığında geri yüklenir. Aksi takdirde konumsal parametreler değişmez. Çıkış durumu, yürütülen son komutun çıkış durumudur.

†† alias [ -ptx ] [ name[ =value ] ] ... Argümansız alias, standart çıktıda takma adların listesini name=value biçiminde yazdırır. -p seçeneği, her birinin önüne alias kelimesinin eklenmesine neden olur. Bir veya daha fazla argüman verildiğinde, değeri verilen her name için bir takma ad tanımlanır. value içindeki sondaki bir boşluk, bir sonraki kelimenin takma ad ikamesi için kontrol edilmesine neden olur. Artık kullanılmayan -t seçeneği, izlenen takma adları (tracked aliases) ayarlamak ve listelemek için kullanılır. İzlenen bir takma adın değeri, verilen ada karşılık gelen tam yol adıdır (pathname). PATH değeri sıfırlandığında değer tanımsız hale gelir ancak takma ad izlenmeye devam eder. -t seçeneği olmadan, argüman listesindeki değer verilmeyen her name için takma adın adı ve değeri yazdırılır. Artık kullanılmayan -x seçeneğinin hiçbir etkisi yoktur. Bir name verilmişse ancak değer verilmemişse ve ad için tanımlanmış bir takma ad yoksa çıkış durumu sıfır dışıdır.

bg [ job... ] Bu komut yalnızca iş kontrolünü (job control) destekleyen sistemlerde bulunur. Belirtilen her işi arka plana alır. job belirtilmemişse geçerli iş arka plana alınır. job biçiminin açıklaması için İşler (Jobs) bölümüne bakın.

† break [ n ] Varsa, çevreleyen for, while, until veya select döngüsünden çıkar. n belirtilmişse, n düzey kırar (döngü dışına çıkar).

builtin [ -ds ] [ -f file ] [ name ... ] Eğer name belirtilmemişse ve -f seçeneği belirtilmemişse, yerleşik komutlar standart çıktıya yazdırılır. -s seçeneği yalnızca özel yerleşik komutları yazdırır. Aksi takdirde, her name, temel adı yerleşik komutun adı olan yol adını (pathname) temsil eder. Giriş noktası fonksiyon adı (entry point function name), yerleşik komut adının önüne b_ eklenerek belirlenir. Bir yol adı ile belirtilen yerleşik komut, yalnızca bu yol adı yol araması (path search) sırasında bulunabildiğinde yürütülecektir. .paths dosyası aracılığıyla yüklenen kütüphanelerde bulunan yerleşik komutlar, .paths dosyasını içeren dizinin yol adı ile ilişkilendirilecektir.

ISO C/C++ prototipi, mycommand yerleşik komutu için b_mycommand(int argc, char *argv[], void *context) şeklindedir; burada argv, argc adet öğeden oluşan bir dizidir ve context, <ast/shell.h> içinde açıklandığı gibi bir Shell_t yapısına isteğe bağlı bir göstericidir (pointer). Özel yerleşik komutlar bir yol adına bağlanamaz veya silinemez. -d seçeneği, verilen yerleşik komutların her birini siler. Dinamik yüklemeyi destekleyen sistemlerde, -f seçeneği yerleşik komutların kodunu içeren paylaşılan bir kütüphaneyi (shared library) adlandırır. Sisteme bağlı olan paylaşılan kütüphane öneği ve/veya uzantısı atlanabilir. Bir kütüphane yüklendikten sonra, sembolleri sonraki builtin çağrıları için kullanılabilir hale gelir. Birden fazla kütüphane, builtin komutunun ayrı çağrılarıyla belirtilebilir. Kütüphaneler, belirtildikleri sıranın tersine göre aranır. Bir kütüphane yüklendiğinde, kütüphanede adı lib_init() olan bir fonksiyon arar ve bu fonksiyonu 0 argümanıyla çağırır.

cd [ -LP ] [ arg ] cd [ -LP ] old new Bu komut iki biçimden birinde olabilir. İlk biçimde geçerli dizini arg olarak değiştirir. Eğer arg - ise dizin önceki dizine değiştirilir. HOME kabuk değişkeni varsayılan arg'dir. PWD değişkeni geçerli dizine ayarlanır. CDPATH kabuk değişkeni, arg'yi içeren dizin için arama yolunu tanımlır. Alternatif dizin adları iki nokta üst üste (:) ile ayrılır. Varsayılan yol şeklindedir (geçerli dizini belirtir). Geçerli dizinin, eşit işaretinden hemen sonra veya yol listesindeki herhangi bir yerde iki nokta üst üste sınırlayıcıları arasında görünebilen boş (null) bir yol adı ile belirtildiğini unutmayın. Eğer arg / ile başlıyorsa, arama yolu kullanılmaz. Aksi takdirde, yoldaki her dizin arg için aranır. cd komutunun ikinci biçimi, geçerli dizin adı olan PWD içindeki old dizgesi yerine new dizgesini koyar ve bu yeni dizine geçmeyi dener. Varsayılan olarak sembolik bağ (symbolic link) adları, dizin adı bulunurken harfi harfine ele alınır. Bu, -L seçeneğine eşdeğerdir. -P seçeneği, dizin belirlenirken sembolik bağların çözümlenmesine neden olur. Komut satırındaki -L veya -P'nin son örneği hangi yöntemin kullanılacağını belirler. cd komutu rksh veya rksh93 tarafından yürütülemeyebilir.

command [ -pvxV ] name [ arg ... ] -v veya -V seçenekleri olmadan, command komutu name'i arg tarafından verilen argümanlarla yürütür. -p seçeneği, PATH değeri tarafından tanımlanan yol yerine varsayılan bir yolun aranmasına neden olur. name bulunurken fonksiyonlar aranmayacaktır. Ayrıca, name bir özel yerleşik komuta atıfta bulunuyorsa, baştaki hançerlerle (daggers) ilişkili özel özelliklerin hiçbiri onurlandırılmayacaktır. (Örneğin, önceden tanımlanmış redirect=′command exec′ takma adı, geçersiz bir yönlendirme verildiğinde bir betiğin sonlanmasını engeller.) -x seçeneğiyle, komutun yürütülmesi çok fazla argüman olması nedeniyle bir başarısızlıkla (errno E2BIG) sonuçlanacaksa, kabuk, her çağrıda argümanların bir alt kümesiyle command name'i birden çok kez çağıracaktır. Birden çok argümana genişleyen ilk kelimeden önce ve birden çok argümana genişleyen son kelimeden sonra gelen argümanlar her çağrıda aktarılacaktır. Çıkış durumu, maksimum çağrı çıkış durumu olacaktır. -v seçeneğiyle command, aşağıda açıklanan yerleşik whence komutuna eşdeğerdir. -V seçeneği command'in whence -v gibi davranmasına neden olur.

† continue [ n ] Çevreleyen for, while, until veya select döngüsünün bir sonraki yinelemesini sürdürür. n belirtilmişse, n. çevreleyen döngüde sürdürür.

disown [ job... ] Bir oturum açma kabuğu sonlandığında, kabuğun verilen her işe veya job belirtilmemişse tüm etkin işlere HUP sinyali göndermemesini sağlar.

echo [ arg ... ] İlk arg bir - ile başlamadığında ve argümanların hiçbiri bir \ içermediğinde, echo argümanlarının her birini bir boşlukla ayırarak ve bir yeni satırla sonlandırarak yazdırır. Aksi takdirde, echo'nun davranışı sisteme bağlıdır ve aşağıda açıklanan print veya printf kullanılmalıdır. Kullanım ve açıklama için echo(1) belgesine bakın.

†† enum [ -i ] type[=(value ...) ] Belirtilen değerlerden birini numaralandırma (enumeration) adları olarak kabul eden bir tamsayı türü olan type adında bir bildirim komutu oluşturur. =(value_...) atlanırsa, type en az iki öğeye sahip indeksli bir dizi değişkeni olmalıdır ve değerler bu dizi değişkeninden alınır. -i belirtilirse değerler büyük/küçük harfe duyarsızdır.

† eval [ arg ... ] Argümanlar kabuğa girdi olarak okunur ve sonuçtaki komut(lar) yürütülür.

† exec [ -c ] [ -a name ] [ arg ... ] arg verilmişse, argümanlarla belirtilen komut, yeni bir işlem oluşturmadan bu kabuğun yerinde yürütülür. -c seçeneği, exec çağrısıyla ilişkili değişken atamaları uygulanmadan önce ortamın (environment) temizlenmesine neden olur. -a seçeneği, yeni işlem için argv[0] değerinin ilk arg yerine name olmasını sağlar. Giriş/çıktı argümanları görünebilir ve geçerli işlemi etkileyebilir. arg verilmemişse, bu komutun etkisi dosya tanımlayıcılarını girdi/çıktı yönlendirme listesinde belirtildiği şekilde değiştirmektir. Bu durumda, bu mekanizmayla açılan 2'den büyük herhangi bir dosya tanımlayıcı numarası, başka bir program çağrıldığında kapatılır.

† exit [ n ] Kabuğun n ile belirtilen çıkış durumuyla çıkmasına neden olur. Değer, belirtilen durumun en önemsiz 8 biti (least significant 8 bits) olacaktır. Eğer n atlanırsa, çıkış durumu yürütülen son komutun çıkış durumudur. Bir dosya sonu (end-of-file) da, ignoreeof seçeneği (aşağıdaki set komutuna bakın) açık olan bir kabuk hariç olmak üzere, kabuğun çıkmasına neden olacaktır.

†† export [ -p ] [ name[=value] ] ... Eğer name verilmemişse, dışa aktarma (export) özniteliğine sahip her değişkenin adları ve değerleri, değerler yeniden girilebilecek şekilde tırnak içine alınarak yazdırılır. export komutu, bir fonksiyon içinde export kullanırsanız yerel değişken oluşturulmaması hariç olmak üzere typeset -x ile aynıdır. -p seçeneği, her birinin önüne export kelimesinin eklenmesine neden olur. Aksi takdirde, verilen adlar daha sonra yürütülen komutların ortamına otomatik olarak dışa aktarılmak üzere işaretlenir.

false Hiçbir şey yapmaz ve 1 çıkış koduyla sonlanır. Sonsuz döngüler için until ile birlikte kullanılır.

fg [ job... ] Bu komut yalnızca iş kontrolünü (job control) destekleyen sistemlerde bulunur. Belirtilen her iş ön plana getirilir ve belirtilen sırada beklenir. Aksi takdirde, geçerli iş ön plana getirilir. job biçiminin açıklaması için İşler (Jobs) bölümüne bakın.

getconf [ name [ pathname ] ] name ile verilen yapılandırma parametresinin geçerli değerini yazdırır. Yapılandırma parametreleri IEEE POSIX 1003.1 ve IEEE POSIX 1003.2 standartları tarafından tanımlanır. (Bkz. pathconf(2) ve sysconf(2).) Değeri dosya sistemindeki konuma bağlı olan parametreler için pathname argümanı gereklidir. Herhangi bir argüman verilmezse, getconf geçerli yapılandırma parametrelerinin adlarını ve değerlerini yazdırır. pathname gerektiren parametrelerin her biri için / yol adı (pathname) kullanılır.

getopts [ -a name ] optstring vname [ arg ... ] arg argümanını yasal seçenekler için kontrol eder. Eğer arg atlanırsa, konumsal parametreler (positional parameters) kullanılır. Bir seçenek argümanı bir + veya - ile başlar. + veya - ile başlamayan bir seçenek veya -- argümanı seçenekleri sonlandırır. + ile başlayan seçenekler, yalnızca optstring bir + ile başladığında tanınır. optstring, getopts komutunun tanıdığı harfleri içerir. Bir harfin ardından bir : geliyorsa, o seçeneğin bir argümana sahip olması beklenir. Seçenekler argümandan boşluklarla ayrılabilir. -? seçeneği, getopts komutunun standart hata üzerinde bir kullanım (usage) mesajı oluşturmasına neden olur. -a argümanı, varsayılanı $0 olan kullanım mesajı için kullanılacak adı belirtmek üzere kullanılabilir. getopts, her çağrıldığında bulduğu bir sonraki seçenek harfini vname değişkeninin içine yerleştirir. arg bir + ile başladığında seçenek harfinin başına bir + eklenecektir. Bir sonraki arg dizini OPTIND içinde saklanır. Varsa seçenek argümanı OPTARG içinde saklanır. optstring içindeki baştaki bir :, getopts komutunun geçersiz bir seçeneğin harfini OPTARG içinde saklamasına, bilinmeyen bir seçenek için vname değerini ? olarak ayarlamasına ve gerekli bir seçenek argümanı eksik olduğunda : olarak ayarlamasına neden olur. Aksi takdirde, getopts bir hata mesajı yazdırır. Başka seçenek kalmadığında çıkış durumu sıfır dışıdır. :, +, -, ?, [, ve ] seçeneklerinden herhangi birini belirtmenin bir yolu yoktur. # seçeneği yalnızca ilk seçenek olarak belirtilebilir.

hist [ -e ename ] [ -nlr ] [ first [ last ] ] hist -s [ old=new ] [ command ] İlk biçimde, terminalde yazılan son HISTSIZE komut arasından first ile last arasındaki bir komut aralığı seçilir. first ve last argümanları bir sayı veya bir dizge (string) olarak belirtilebilir. Verilen dizgeyle başlayan en son komutu bulmak için bir dizge kullanılır. Negatif bir sayı, mevcut komut numarasına göre bir fark (offset) olarak kullanılır. -l seçeneği seçilirse, komutlar standart çıktıda listelenir. Aksi takdirde, bu klavye komutlarını içeren bir dosya üzerinde ename düzenleyici (editor) programı çağrılır. ename belirtilmemişse, HISTEDIT değişkeninin değeri kullanılır. HISTEDIT ayarlanmamışsa, düzenleyici olarak FCEDIT (varsayılan /bin/ed) kullanılır. Düzenleme tamamlandığında, değişiklikler kaydedilmişse düzenlenen komut(lar) yürütülür. last belirtilmemişse, first değerine ayarlanır. first belirtilmemişse, düzenleme için varsayılan değer önceki komut, listeleme için ise -16'dır. -r seçeneği komutların sırasını tersine çevirir ve -n seçeneği listeleme sırasında komut numaralarını gizler. İkinci biçimde, command yukarıda açıklanan first gibi yorumlanır ve varsayılan olarak yürütülen son komuttur. Sonuçtaki komut, isteğe bağlı old=new ikamesi gerçekleştirildikten sonra yürütülür.

jobs [ -lnp ] [ job ... ] Verilen her iş hakkında veya job atlanırsa tüm etkin işler hakkında bilgi listeler. -l seçeneği normal bilgilere ek olarak işlem kimliklerini (process id) listeler. -n seçeneği yalnızca son bildirimden bu yana durdurulan veya çıkan işleri görüntüler. -p seçeneği yalnızca işlem grubunun (process group) listelenmesine neden olur. job biçiminin açıklaması için İşler (Jobs) bölümüne bakın.

kill [ -s signame ] job ... kill [ -n signum ] job ... kill -Ll [ sig ... ] Belirtilen işlere veya işlemlere TERM (sonlandırma) sinyalini veya belirtilen sinyali gönderir. Sinyaller, -n seçeneği ile sayı olarak ya da -s seçeneği ile ad olarak (<signal.h> içinde verildiği gibi, SIGCLD'nin CHLD olarak adlandırılması istisnası dışında ``SIG'' öneki kaldırılmış olarak) verilir. Geriye dönük uyumluluk için, n ve s harfleri atlanabilir ve sayı veya ad doğrudan - karakterinden sonra yerleştirilebilir. Gönderilen sinyal TERM (sonlandırma) veya HUP (kapatma/hangup) ise, durdurulmuş olması durumunda işe veya işleme bir CONT (devam et/continue) sinyali gönderilir. job argümanı, etkin işlerden birinin üyesi olmayan bir işlemin işlem kimliği (process id) olabilir. job biçiminin açıklaması için İşler (Jobs) bölümüne bakın. Üçüncü biçimde (kill -l veya kill -L), sig belirtilmemişse sinyal adları listelenir. -l seçeneği yalnızca sinyal adlarını listeler. -L seçeneği her sinyal adını ve buna karşılık gelen numarayı listeler. Aksi takdirde, bir ad olan her sig için karşılık gelen sinyal numarası listelenir. Bir sayı olan her sig için, sig'in en önemsiz 8 bitine karşılık gelen sinyal adı listelenir.

let arg ... Her arg, değerlendirilecek ayrı bir aritmetik ifadedir. let, yalnızca set seçeneği letoctal açık olduğunda 0 ile başlayan sekizlik (octal) sabitleri tanır. Aritmetik ifade değerlendirmesinin açıklaması için yukarıdaki Aritmetik Değerlendirme (Arithmetic Evaluation) bölümüne bakın. Son ifadenin değeri sıfır dışı ise çıkış durumu 0, aksi takdirde 1'dir.

† newgrp [ arg ... ] exec /bin/newgrp arg .... komutuna eşdeğerdir.

print [ -CRenprsv ] [ -u unit] [ -f format ] [ arg ... ] Seçenek olmadan veya - ya da -- seçeneği ile, her arg standart çıktıya yazdırılır.

  • -f seçeneği, argümanların printf tarafından açıklandığı gibi yazdırılmasına neden olur.: Bu durumda, e, n, r, R seçenekleri yoksayılır. Aksi takdirde, -C, -R, -r veya -v belirtilmedikçe, aşağıdaki kaçış (escape) kuralları uygulanacaktır: \a Uyarı (alert) karakteri (ascii 07).

\b Geri al (backspace) karakteri (ascii 010). \c print komutunun daha fazla argüman işlemeden ve yeni satır eklemeden sonlanmasına neden olur. \f Sayfa besleme (formfeed) karakteri (ascii 014). \n Yeni satır (new-line) karakteri (ascii 012). \r Satır başı (carriage return) karakteri (ascii 015). \t Sekme (tab) karakteri (ascii 011). \v Dikey sekme (vertical tab) karakteri (ascii 013). \E Kaçış (escape) karakteri (ascii 033). \ Ters eğik çizgi (backslash) karakteri . \0x x ile verilen 1, 2 veya 3 basamaklı sekizlik (octal) dizge ile tanımlanan karakter.

-R seçeneği, -n dışındaki tüm sonraki argümanları ve seçenekleri yazdıracaktır. -e seçeneği, yukarıdaki kaçış kurallarının uygulanmasına neden olur. Bu varsayılan davranıştır. Daha önceki bir -r seçeneğinin etkisini tersine çevirir. -p seçeneği, argümanların standart çıktı yerine ⎪& ile başlatılan işlemin boru hattına (pipe) yazılmasına neden olur. -v seçeneği, her arg'yi bir değişken adı olarak ele alır ve değeri printf %B biçiminde yazar. -C seçeneği, her arg'yi bir değişken adı olarak ele alır ve değeri printf %#B biçiminde yazar. -s seçeneği, argümanların standart çıktı yerine geçmiş dosyasına (history file) yazılmasına neden olur. -u seçeneği, çıktının yerleştirileceği tek basamaklı bir dosya tanımlayıcısı birim numarasını (unit) belirtmek için kullanılabilir. Varsayılan değer 1'dir. -n seçeneği kullanılırsa, çıktıya yeni satır eklenmez.

printf format [ arg ... ] arg argümanları, format biçim dizgesiyle ilişkili ANSI-C biçimlendirme kurallarına uygun olarak standart çıktıya yazdırılır. Argüman sayısı biçim belirtimlerinin sayısını aşarsa, kalan argümanları biçimlendirmek için biçim dizgesi yeniden kullanılır. Aşağıdaki uzantılar da kullanılabilir: %b İlgili arg içindeki kaçış dizilerinin print komutunda açıklandığı gibi genişletilmesini sağlamak için %s yerine %b biçimi kullanılabilir. %B %B seçeneği, argümanların her birinin değişken adları olarak ele alınmasına ve değişkenin ikili (binary) değerinin yazdırılmasına neden olur. Alternatif # bayrağı, bir birleşik değişkenin (compound variable) tek bir satırda çıktı olarak verilmesini sağlar. Bu, en çok birleşik değişkenler ve özniteliği -b olan değişkenler için kullanışlıdır. %H arg içindeki HTML ve XML'de özel olan karakterlerin varlık adı (entity name) olarak çıktı verilmesini sağlamak için %s yerine %H biçimi kullanılabilir. Alternatif # bayrağı, çıktıyı bir URI olarak kullanılmak üzere biçimlendirir. %P arg'nin genişletilmiş bir düzenli ifade (extended regular expression) olarak yorumlanmasını ve bir kabuk kalıbı (shell pattern) olarak yazdırılmasını sağlamak için %s yerine %P biçimi kullanılabilir. %R arg'nin bir kabuk kalıbı (shell pattern) olarak yorumlanmasını ve genişletilmiş bir düzenli ifade olarak yazdırılmasını sağlamak için %s yerine %R biçimi kullanılabilir. %q Sonuçtaki dizgenin kabuğa yeniden girilebilecek şekilde tırnak içine alınmasını sağlamak için %s yerine %q biçimi kullanılabilir. q'nun önünde alternatif biçim belirticisi # olduğunda, dizge bir .csv biçimli dosyadaki bir alan için uygun bir şekilde tırnak içine alınır. %(date-format)T Bir argümanın tarih/saat dizgesi olarak ele alınmasını ve tarihin/saatin date(1) komutu için tanımlandığı gibi date-format tarih biçimine göre biçimlendirilmesini sağlamak için %(date-format)T biçimi kullanılabilir. %Z %Z biçimi, değeri 0 olan bir bayt çıktı verir. %d %d biçiminin duyarlılık (precision) alanından sonra bir . ve çıktı tabanı (output base) gelebilir. Bu durumda, # bayrak karakteri base# önekinin eklenmesine neden olur.

# bayrağı, çıktı tabanı olmadan %d biçimiyle kullanıldığında, çıktıyı aşağıdaki son eklerden biriyle belirtilen 1000'in kuvvetleri cinsinden görüntüler: k M G T P E; ve %i biçimiyle kullanıldığında çıktıyı aşağıdaki son eklerden biriyle belirtilen 1024'in kuvvetleri cinsinden görüntüler: Ki Mi Gi Ti Pi Ei.

= = bayrağı, çıktıyı belirtilen alan genişliği içinde ortalar. L L bayrağı, %c veya %s biçimleriyle kullanıldığında, duyarlılığı bayt sayısı yerine karakter genişliği olarak ele alır. , , bayrağı, %d veya %f biçimleriyle kullanıldığında, basamak gruplarını gruplandırma sınırlayıcısıyla ayırır (C yerel ayarında [locale] 3'lü gruplarda , kullanılır).

pwd [ -LP ] Geçerli çalışma dizininin (working directory) değerini çıktı olarak verir. Varsayılan -L seçeneğidir; geçerli dizinin mantıksal adını yazdırır. -P seçeneği verilirse, tüm sembolik bağlar (symbolic links) addan çözümlenir. Komut satırıındaki -L veya -P'nin son örneği hangi yöntemin kullanılacağını belirler.

read [ -ACSprsv ] [ -d delim] [ -n n] [ [ -N n] [ [ -t timeout] [ -u unit] [ vname?prompt ] [ vname ... ] Kabuk girdi mekanizması. Bir satır okunur ve IFS içindeki karakterler ayırıcı olarak kullanılarak alanlara ayrılır. Kaçış karakteri , bir sonraki karakterin özel anlamını kaldırmak ve satır devamı için kullanılır. -d seçeneği, okumanın yeni satır yerine delim ifadesinin ilk karakterine kadar devam etmesine neden olur. -n seçeneği tam bir satır yerine en fazla n bayt okunmasını sağlar, ancak yavaş bir cihazdan okuma yaparken herhangi bir karakter okunur okunmaz geri dönecektir. -N seçeneği, bir dosya sonu (end-of-file) ile karşılaşılmadığı veya -t seçeneği nedeniyle okuma zaman aşımına uğramadığı sürece tam olarak n bayt okunmasını sağlar. Ham modda (-r), \ karakterine özel bir işlem yapılmaz. İlk alan ilk vname değişkenine, ikinci alan ikinci vname değişkenine vb. atanır ve kalan alanlar son vname değişkenine atanır. vname ikili (binary) özniteliğe sahip olduğunda ve -n veya -N belirtildiğinde, okunan baytlar doğrudan değişkende saklanır. Eğer -v belirtilmişse, bir terminal cihazından okuma yaparken ilk vname değeri varsayılan değer olarak kullanılacaktır. -A seçeneği, vname değişkeninin unset edilmesine ve okunan her alanın dizinli dizi vname'in ardışık öğelerinde saklanmasına neden olur. -C seçeneği, vname değişkeninin bir birleşik değişken (compound variable) olarak okunmasına neden olur. Başlangıçtaki aç parantez bulunurken boşluklar yoksayılacaktır. -S seçeneği, satırın bir .csv biçimli dosyadaki bir kayıt gibi ele alınmasına neden olur, böylece çift tırnaklar ayırıcı karakterin ve yeni satır karakterinin bir alan içinde görünmesine izin vermek için kullanılabilir. -p seçeneği, girdi satırının kabuk tarafından ⎪& kullanılarak başlatılan bir işlemin girdi borusundan (input pipe) alınmasını sağlar. Eğer -s seçeneği varsa, girdi geçmiş dosyasına (history file) bir komut olarak kaydedilecektir. -u seçeneği, okuma yapılacak tek basamaklı bir dosya tanımlayıcı birimini (unit) belirtmek için kullanılabilir. Dosya tanımlayıcısı exec özel yerleşik komutuyla açılabilir. Birim n için varsayılan değer 0'dır. -t seçeneği, bir terminal veya boru hattından okuma yaparken saniye cinsinden zaman aşımını belirtmek için kullanılır. vname atlanırsa, varsayılan vname olarak REPLY kullanılır. -p seçeneğiyle bir dosya sonu (end-of-file), bu işlem için temizlik yapılmasına neden olur, böylece başka bir işlem başlatılabilir. Eğer ilk argüman bir ? içeriyorsa, bu kelimenin geri kalanı kabuk etkileşimliyken standart hata üzerinde bir istem (prompt) olarak kullanılır. Dosya sonuyla karşılaşılmadığı veya okuma zaman aşımına uğramadığı sürece çıkış durumu 0'dır.

†† readonly [ -p ] [ vname[=value] ] ... vname verilmemişse, salt okunur (readonly) özniteliğine sahip her değişkenin adları ve değerleri, değerler yeniden girilebilecek şekilde tırnak içine alınarak yazdırılır. -p seçeneği, her birinin önüne readonly kelimesinin eklenmesine neden olur. Aksi takdirde, verilmiş vname'ler salt okunur olarak işaretlenir ve bu adlar sonraki atamalarla değiştirilemez. Bir tür tanımlanırken, salt okunur bir alt değişkenin değeri tanımlanmamışsa, her örnek oluşturulurken değer gereklidir.

† return [ n ] Bir kabuk fonksiyonunun veya . betiğinin (script), çağıran betiğe n ile belirtilen çıkış durumuyla dönmesini sağlar. Değer, belirtilen durumun en önemsiz 8 biti olacaktır. Eğer n atlanırsa, dönüş durumu yürütülen son komutun çıkış durumudur. return bir fonksiyon veya . betiği içinde olunmadığında çağrılırsa, exit ile aynı şekilde davranır.

† set [ ±BCGabefhkmnoprstuvx ] [ ±o [ option ] ] ... [ ±A vname ] [ arg ... ] Bu komutun seçenekleri şu anlamlara gelir:

  • -A: Dizi ataması. vname değişkenini unset eder ve arg listesindeki değerleri sırayla atar. Eğer +A kullanılırsa, vname değişkeni önce unset edilmez.
  • -B: Küme parantezi kalıp alanı oluşturmayı (brace pattern field generation) etkinleştirir. Bu varsayılan davranıştır.
  • -B: Küme parantezi grubu genişletmeyi etkinleştirir. Varsayılan olarak açıktır.
  • -C: > yönlendirmesinin mevcut dosyaları kesmesini (truncation) engeller. Oluşturulan dosyalar O_EXCL moduyla açılır. Açık olduğunda bir dosyayı kesmek (truncate) için >⎪ gerekir.
  • -G: Dosya adı oluşturma (file name generation) için kullanıldığında, ∗∗ kalıbının tek başına dosyalarla ve sıfır veya daha fazla dizin ve alt dizinle eşleşmesini sağlar. Sonrasında bir / gelirse yalnızca dizinler ve alt dizinler eşleşir.
  • -a: Tanımlanan tüm sonraki değişkenler otomatik olarak dışa aktarılır (export).
  • -b: Bir arka plan işi durum değiştirdiğinde, bir sonraki istemi beklemek yerine iş tamamlama mesajlarını gerçekleşir gerçekleşmez yazdırır.
  • -e: Bir ⎪⎪ veya && komutunda yer almadığı, if while veya until komutunu takip eden komut olmadığı ya da ! işaretini takip eden boru hattında olmadığı sürece, bir komutun çıkış durumu sıfır dışıysa, ayarlanmışsa ERR tuzağını (trap) yürütür ve çıkar. Bu mod profiller okunurken devre dışı bırakılır.
  • -f: Dosya adı oluşturmayı (file name generation) devre dışı bırakır.
  • -h: Her komut ilk karşılaşıldığında izlenen bir takma ad (tracked alias) haline gelir.
  • -k: (Artık kullanılmıyor). Tüm değişken atama argümanları, yalnızca komut adından önce gelenler değil, bir komut için ortama (environment) yerleştirilir.
  • -m: Arka plan işleri ayrı bir işlem grubunda çalışır ve tamamlandığında bir satır yazdırılır. Arka plan işlerinin çıkış durumu bir tamamlama mesajında bildirilir. İş kontrolü olan sistemlerde bu seçenek, etkileşimli kabuklar için otomatik olarak açılır.
  • -n: Komutları okur ve sözdizimi hataları için kontrol eder, ancak bunları yürütmez. Etkileşimli kabuklar için yoksayılır.
  • -o: Takip eden argüman aşağıdaki seçenek adlarından biri olabilir: allexport -a ile aynıdır. errexit -e ile aynıdır. bgnice Tüm arka plan işleri daha düşük öncelikle çalıştırılır. Bu varsayılan moddur. braceexpand -B ile aynıdır. emacs Komut girişi için sizi emacs tarzı bir satır içi düzenleyiciye alır. globstar -G ile aynıdır. gmacs Komut girişi için sizi gmacs tarzı bir satır içi düzenleyiciye alır. ignoreeof Kabuk, dosya sonunda (end-of-file) çıkış yapmaz. exit komutu kullanılmalıdır. keyword -k ile aynıdır. letoctal let komutu 0 ile başlayan sekizlik (octal) sabitlere izin verir. markdirs Dosya adı oluşturmadan (file name generation) kaynaklanan tüm dizin adlarının sonuna bir / eklenir. monitor -m ile aynıdır. multiline Yerleşik düzenleyiciler, ekran genişliğinden daha uzun olan satırlar için ekranda birden fazla satır kullanır. Bu tüm terminallerde çalışmayabilir. noclobber -C ile aynıdır. noexec -n ile aynıdır. noglob -f ile aynıdır. nolog Fonksiyon tanımlarını geçmiş dosyasına kaydetmez. notify -b ile aynıdır. nounset -u ile aynıdır. pipefail Bir boru hattı (pipeline), boru hattının tüm bileşenleri tamamlanana kadar tamamlanmaz ve geri dönüş değeri, başarısız olan son sıfır dışı komutun değeri veya hiçbir komut başarısız olmamışsa sıfır olur. showme Etkinleştirildiğinde, önünde noktalı virgül (;) bulunan basit komutlar veya boru hatları, xtrace seçeneği etkinleştirilmiş gibi görüntülenecektir ancak yürütülmeyecektir. Aksi takdirde, baştaki ; yoksayılacaktır. privileged -p ile aynıdır. verbose -v ile aynıdır. trackall -h ile aynıdır. vi Escape karakteri 033'e basana kadar sizi vi tarzı bir satır içi düzenleyicinin ekleme (insert) moduna alır. Bu sizi kontrol moduna geçirir. Bir return (satır başı) satırı gönderir.

viraw vi modunda her karakter yazıldığı anda işlenir. xtrace -x ile aynıdır. Hiçbir seçenek adı belirtilmezse geçerli seçenek ayarları yazdırılır.

  • -p: $HOME/.profile dosyasının işlenmesini devre dışı bırakır ve ENV dosyası yerine /etc/suid_profile dosyasını kullanır. Etkin uid (gid) gerçek uid (gid) değerine eşit olmadığında bu mod her zaman açıktır. Bunu kapatmak, etkin uid ve gid değerlerinin gerçek uid ve gid değerlerine ayarlanmasına neden olur.
  • -r: Kısıtlı kabuğu (restricted shell) etkinleştirir. Bu seçenek bir kez ayarlandıktan sonra unset edilemez.
  • -s: Konumsal parametreleri sözlüksel (lexicographically) olarak sıralar.
  • -t: (Artık kullanılmıyor). Bir komutu okuyup yürüttükten sonra çıkar.
  • -u: İkame yaparken ayarlanmamış parametreleri bir hata olarak ele alır.
  • -v: Kabuk girdi satırlarını okundukları gibi yazdırır.
  • -x: Komutları ve argümanlarını yürütüldükleri gibi yazdırır.
  • --: Seçeneklerin hiçbirini değiştirmez; $1 değerini - ile başlayan bir değere ayarlamakta kullanışlıdır. Bu seçeneği hiçbir argüman takip etmiyorsa, konumsal parametreler unset edilir.

Artık kullanılmayan bir özellik olarak, ilk arg - ise, -x ve -v seçenekleri kapatılır ve sonraki arg ilk argüman olarak ele alınır. - yerine + kullanılması bu seçeneklerin kapatılmasına neden olur. Bu seçenekler kabuk çağrılırken de kullanılabilir. Geçerli seçenekler kümesi $- içinde bulunabilir. -A belirtilmedikçe, kalan argümanlar konumsal parametrelerdir ve sırayla $1 $2 .... değerlerine atanır. Hiçbir argüman verilmezse, tüm değişkenlerin adları ve değerleri standart çıktıya yazdırılır.

† shift [ n ] $n+1 ... konumundaki konumsal parametreler $1 ... olarak yeniden adlandırılır, varsayılan n değeri 1'dir. n parametresi, sıfırdan küçük olmayan ve $# değerine eşit veya daha küçük bir sayıya değerlendirilen herhangi bir aritmetik ifade olabilir.

sleep seconds Yürütmeyi, seconds ile verilen ondalık saniye sayısı veya saniye kesri kadar askıya alır.

† trap [ -p ] [ action ] [ sig ] ... -p seçeneği, argümanlar tarafından belirtildiği gibi her bir tuzakla (trap) ilişkili tuzak eyleminin uygun tırnak işaretleriyle yazdırılmasına neden olur. Aksi takdirde, kabuk sig sinyal(ler)ini aldığında action, eval komutuna bir argümanmış gibi işlenecektir. Her bir sig, bir sayı veya sinyalin adı olarak verilebilir. Tuzak komutları sinyal numarası sırasına göre yürütülür. Mevcut kabuğa girişte yoksayılan bir sinyal üzerinde tuzak ayarlamaya yönelik herhangi bir girişim etkisizdir. Eğer action atlanırsa ve ilk sig bir sayı ise ya da action - ise, o zaman her sig için tuzak(lar) orijinal değerlerine sıfırlanır. Eğer action boş (null) dizge ise, bu sinyal kabuk ve çağırdığı komutlar tarafından yoksayılır. sig ERR ise, bir komut sıfır dışı bir çıkış durumuna sahip olduğunda action yürütülür. sig DEBUG ise, her komuttan önce action yürütülür. .sh.command değişkeni, action çalışırken geçerli komut satırının içeriğini içerecektir. Tuzağın çıkış durumu 2 ise komut yürütülmeycektir. Tuzağın çıkış durumu 255 ise ve bir fonksiyonun veya nokta (.) betiğinin (dot script) içinde ise, fonksiyon veya nokta betiği geri dönecektir. sig 0 veya EXIT ise ve tuzak ifadesi function ad sözdizimi ile tanımlanmış bir fonksiyonun gövdesi içinde yürütülürse, fonksiyon tamamlandıktan sonra command action yürütülür. sig, herhangi bir fonksiyonun dışında ayarlanan bir tuzak için 0 veya EXIT ise, kabuktan çıkışta command action yürütülür. sig KEYBD ise, emacs, gmacs veya vi modundayken bir tuş okunduğunda action yürütülür. Argümansız trap komutu, her sinyal numarasıyla ilişkili komutların bir listesini yazdırır.

Bir tuzak eyleminde (trap action) argümansız bir exit veya return, tuzağı çağıran komutun çıkış durumunu koruyacaktır.

true Hiçbir şey yapmaz ve 0 çıkış koduyla sonlanır. Sonsuz döngüler için while ile birlikte kullanılır.

†† typeset [ ±ACHSfblmnprtux ] [ ±EFLRXZi[n] ] [ +-M [ mapname ] ] [ -T [ tname=(assign_list) ] ] [ -h str ] [ -a [type] ] [ vname[=value ] ] ... Kabuk değişkenleri ve fonksiyonları için öznitelikleri (attributes) ve değerleri ayarlar. function ad sözdizimi ile tanımlanmış bir fonksiyon içinde çağrıldığında, vname değişkeninin yeni bir örneği oluşturulur ve fonksiyon tamamlandığında değişkenin değeri ve türü geri yüklenir. Aşağıdaki öznitelik listesi belirtilebilir:

  • -A: vname değişkenini ilişkisel dizi (associative array) olarak bildirir. İndisler aritmetik ifadeler yerine dizgelerdir (strings).
  • -C: Her bir vname değişkeninin birleşik bir değişken (compound variable) olmasına neden olur. value bir birleşik değişkeni adlandırırsa vname içine kopyalanır. Aksi takdirde, her bir vname değişkenini unset eder.
  • -a: vname değişkenini indisli dizi (indexed array) olarak bildirir. type belirtilmişse, enum komutuyla oluşturulan bir numaralandırma (enumeration) türünün adı olmalıdır ve numaralandırma sabitlerinin indis olarak kullanılmasına izin verir.
  • -E: vname değişkenini çift duyarlıklı kayan noktalı sayı (double precision floating point number) olarak bildirir. n sıfır dışı ise, vname genişletilirken kullanılan anlamlı basamak sayısını tanımlar. Aksi takdirde on anlamlı basamak kullanılacaktır.
  • -F: vname değişkenini çift duyarlıklı kayan noktalı sayı (double precision floating point number) olarak bildirir. n sıfır dışı ise, vname genişletilirken kullanılan ondalık noktadan sonraki basamak sayısını tanımlar. Aksi takdirde ondalık noktadan sonra on basamak kullanılacaktır.
  • -H: Bu seçenek, UNIX dışı makinelerde UNIX'ten ana makine adına (host-name) dosya eşlemesi sağlar.
  • -L: Değeri sola hizalar ve baştaki boşlukları kaldırır. n sıfır dışı ise alan genişliğini tanımlar, aksi takdirde ilk atama değerinin genişliğine göre belirlenir. Değişkene atama yapıldığında, alana sığması için sağdan boşluklarla doldurulur veya gerekirse kesilir. -R seçeneği kapatılır.
  • -M: Belirtilen işlenenlerin her birine bir değer atarken tolower ve toupper gibi wctrans(3) tarafından tanımlanan karakter eşlemeyi kullanır. Eşleme belirtildiğinde ve işlenen olmadığında, bu eşlemeyi kullanan tüm değişkenler standart çıktıya yazılır. Eşleme atlandığında ve işlenen olmadığında, tüm eşlenmiş değişkenler standart çıktıya yazılır.
  • -R: Değeri sağa hizalar ve baştaki boşluklarla doldurur. n sıfır dışı ise alan genişliğini tanımlar, aksi takdirde ilk atama değerinin genişliğine göre belirlenir. Değişken yeniden atanırsa alan soldan boşluklarla doldurulur veya sondan kesilir. -L seçeneği kapatılır.
  • -S: Bir tür tanımının assign_list (atama listesi) içinde kullanıldığında, belirtilen alt değişkenin türün tüm örnekleri tarafından paylaşılmasına neden olur. function ayrılmış sözcüğü ile tanımlanan bir fonksiyon içinde kullanıldığında, belirtilen değişkenler fonksiyon statik kapsamına (static scope) sahip olacaktır. Aksi takdirde, atama listesi işlenmeden önce değişken unset edilir.
  • -T: Ardından tname gelirse, tname'e yapılan birleşik atama assign_list kullanarak tname adında bir tür oluşturur. Aksi takdirde, tüm tür tanımlarını standart çıktıya yazar.
  • -X: vname değişkenini çift duyarlıklı kayan noktalı sayı olarak bildirir ve ISO-C99'un %a biçimini kullanarak genişletir. n sıfır dışı ise, vname genişletilirken kullanılan taban noktasından (radix point) sonraki onaltılık (hex) basamak sayısını tanımlar. Varsayılan değer 10'dur.
  • -Z: İlk boşluk olmayan karakter bir rakamsa ve -L seçeneği ayarlanmamışsa sağa hizalar ve baştaki sıfırlarla doldurur. -L seçeneği de ayarlanmışsa baştaki sıfırları kaldırır. n sıfır dışı ise alan genişliğini tanımlar, aksi takdirde ilk atama değerinin genişliğine göre belirlenir.
  • -f: Adlar, değişken adları yerine fonksiyon adlarını belirtir. Hiçbir atama yapılamaz ve geçerli diğer tek seçenekler -S, -t, -u ve -x'tir. -S seçeneği, bir türde tanımlanan disiplin fonksiyonlarıyla (discipline functions) fonksiyonun statik olduğunu belirtmek için kullanılabilir. Statik bir fonksiyon için, o türün hangi örneğinin başvurduğuna bakılmaksızın tüm örnekleri tarafından aynı yöntem kullanılacaktır. Ek olarak, yalnızca orijinal tür tanımındaki değişkenlerin değerini kullanabilir. Bu disiplin fonksiyonları hiçbir tür örneğinde yeniden tanımlanamaz. -t seçeneği bu fonksiyon için yürütme izlemeyi (execution tracing) açar. -u seçeneği bu fonksiyonun tanımsız olarak işaretlenmesine neden olur. Fonksiyona başvurulduğunda fonksiyon tanımını bulmak için FPATH değişkeni aranacaktır. -f dışında bir seçenek belirtilmezse, fonksiyon tanımı standart çıktıda görüntülenecektir. +f belirtilirse, fonksiyon adını içeren ve ardından bu fonksiyonun tanımlandığı dosyanın satır numarasını ve yol adını (varsa) içeren bir kabuk yorumu görüntülenir. Çıkış durumu, fonksiyonun tanımlı olup olmadığını belirlemek için kullanılabilir; böylece typeset -f .sh.math.name komutu, matematik fonksiyon adı tanımlı olduğunda 0, aksi takdirde sıfır dışı değer döndürecektir.
  • -b: Değişken herhangi bir sayıda bayt veri tutabilir. Veri metin veya ikili (binary) olabilir. Değer, verinin base64 kodlamasıyla temsil edilir. -Z de belirtilmişse, arabellek içindeki verinin bayt cinsinden boyutu -Z ile ilişkili boyuta göre belirlenecektir. Atanan base64 dizgesi daha fazla veriyle sonuçlanırsa kesilecektir. Aksi takdirde, değeri sıfır olan baytlarla doldurulacaktır. Bu arabellekteki gerçek veriyi, verinin base64 kodlaması yerine çıktı olarak vermek için printf %B biçimi kullanılabilir.
  • -h: Man sayfasında alt değişken hakkında bilgi oluştururken bilgi eklemek amacıyla tür tanımları içinde kullanılır. Tür tanımının dışında kullanıldığında yoksayılır. -f ile kullanıldığında bilgi, ilgili disiplin fonksiyonu ile ilişkilendirilir.
  • -i: vname değişkeninin dahili olarak tamsayı (integer) olarak temsil edileceğini bildirir. Bir tamsayıya atama yapılırken, atamanın sağ tarafı bir aritmetik ifade olarak değerlendirilir. n sıfır dışı ise, çıktı aritmetik tabanını tanımlar, aksi takdirde çıktı tabanı on olacaktır.
  • -l: -i, -E veya -F ile kullanıldığında uzun tamsayı (long integer) veya uzun kayan noktalı sayıyı (long float) belirtir. Aksi takdirde, tüm büyük harfler küçük harfe dönüştürülür. Büyük harf seçeneği olan -u kapatılır. -M tolower seçeneğine eşdeğerdir.
  • -m: Değişkeni taşır veya yeniden adlandırır. Değer, değeri vname'e taşınacak olan değişkenin adıdır. Orijinal değişken unset edilecektir. Başka seçeneklerle birlikte kullanılamaz.
  • -n: vname değişkenini, adı vname değişkeninin değeri tarafından tanımlanan değişkene bir referans (reference) olarak bildirir. Bu genellikle, adı bir argüman olarak aktarılan bir fonksiyonun içindeki bir değişkene başvurmak için kullanılır. Başka seçeneklerle birlikte kullanılamaz.
  • -p: Verilen vname'ler için ad, öznitelikler ve değerler standart çıktıya kabuk girdisi olarak kullanılabilecek bir biçimde yazılır. +p belirtilirse değerler görüntülenmez.
  • -r: Verilen vname'ler salt okunur olarak işaretlenir ve bu adlar sonraki atamalarla değiştirilemez.
  • -t: Değişkenleri etiketler (tags). Etiketler kullanıcı tarafından tanımlanabilir ve kabuk için özel bir anlamı yoktur.
  • -u: -i ile birlikte verildiğinde işaretsiz tamsayıyı (unsigned integer) belirtir. Aksi takdirde, tüm küçük harfler büyük harfe dönüştürülür. Küçük harf seçeneği olan -l kapatılır. -M toupper seçeneğine eşdeğerdir.
  • -x: Verilen vname'ler, daha sonra yürütülen komutların ortamına otomatik olarak dışa aktarılmak (export) üzere işaretlenir. Adında . içeren değişkenler dışa aktarılamaz.

-i özniteliği -R, -L, -Z veya -f ile birlikte belirtilemez.

  • yerine + kullanılması bu seçeneklerin kapatılmasına neden olur. Hiçbir vname argümanı verilmezse, değişkenlerin vname'lerinin (ve isteğe bağlı olarak değerlerinin) bir listesi yazdırılır. (- yerine + kullanılması değerlerin yazdırılmasını engeller.) -p seçeneği, seçeneklerin adları yerine her addan önce typeset ve ardından seçenek harflerinin yazdırılmasına neden olur. -p dışında herhangi bir seçenek verilirse, yalnızca verilen seçeneklerin tümüne sahip olan değişkenler yazdırılır. Aksi takdirde, özniteliklere sahip olan tüm değişkenlerin vname'leri ve öznitelikleri yazdırılır.

ulimit [ -HSacdfmnpstv ] [ limit ] Bir kaynak sınırını ayarlar veya görüntüler. Mevcut kaynak sınırları aşağıda listelenmiştir. Birçok sistem bu sınırlardan birini veya daha fazlasını desteklemez. limit belirtildiğinde, belirtilen kaynak için sınır ayarlanır. limit değeri, her bir kaynakla birlikte aşağıda belirtilen birimde bir sayı veya unlimited (sınırsız) değeri olabilir. -H ve -S seçenekleri, verilen kaynak için sert sınırın (hard limit) mı yoksa yumuşak sınırın (soft limit) mi ayarlanacağını belirtir. Sert bir sınır bir kez ayarlandıktan sonra artırılamaz. Yumuşak bir sınır, sert sınırın değerine kadar artırılabilir. Ne H ne de S seçeneği belirtilmemişse, sınır her ikisi için de geçerli olur. limit atlandığında geçerli kaynak sınırı yazdırılır. Bu durumda, H belirtilmediği sürece yumuşak sınır yazdırılır. Birden fazla kaynak belirtildiğinde, değerden önce sınır adı ve birimi yazdırılır.

  • -a: Mevcut kaynak sınırlarının tümünü listeler.
  • -c: Çekirdek dökümlerinin (core dumps) boyutu üzerindeki 512 baytlık blokların sayısı.
  • -d: Veri alanının (data area) boyutu üzerindeki kilobayt (K-bytes) sayısı.
  • -f: Geçerli işlem veya alt işlemler tarafından yazılabilecek dosyalar üzerindeki 512 baytlık blokların sayısı (herhangi bir boyuttaki dosyalar okunabilir).
  • -m: Fiziksel belleğin boyutu üzerindeki kilobayt sayısı.
  • -n: Dosya tanımlayıcılarının (file descriptors) sayısı artı 1.
  • -p: Boru hattı arabelleğe alması (pipe buffering) için 512 baytlık blokların sayısı.
  • -s: Yığın alanının (stack area) boyutu üzerindeki kilobayt sayısı.
  • -t: Her bir işlem tarafından kullanılacak CPU saniye sayısı.
  • -v: Sanal bellek için kilobayt sayısı.

Hiçbir seçenek belirtilmezse -f varsayılır.

umask [ -S ] [ mask ] Kullanıcı dosya oluşturma maskesi (file-creation mask) mask değerine ayarlanır (bkz. umask(2)). mask, chmod(1) içinde açıklandığı gibi sekizlik (octal) bir sayı veya sembolik bir değer olabilir. Sembolik bir değer verilirse, yeni umask değeri, mask'ın önceki umask değerinin tümleyenine uygulanması sonucunun tümleyenidir. mask atlanırsa maskenin geçerli değeri yazdırılır. -S seçeneği, modun sembolik bir değer olarak yazdırılmasına neden olur. Aksi takdirde, maske sekizlik tabanda yazdırılır.

† unalias [ -a ] name ... Ad listesi tarafından verilen takma adlar (aliases) takma ad listesinden kaldırılır. -a seçeneği tüm takma adların unset edilmesine neden olur.

†unset [ -fnv ] vname ... vname listesiyle verilen değişkenlerin ataması kaldırılır; yani, bir tür içindeki alt değişkenler hariç olmak üzere, değerleri ve öznitelikleri silinir. Bir türün alt değişkenleri için, değerler tür tanımındaki varsayılan değere sıfırlanır. Salt okunur (readonly) değişkenler unset edilemez. -f seçeneği ayarlanmışsa, adlar fonksiyon adlarını belirtir. -v seçeneği ayarlanmışsa, adlar değişken adlarını belirtir. -f seçeneği -v seçeneğini geçersiz kılar. Eğer -n ayarlanmışsa ve name bir ad referansı (name reference) ise, başvurduğu değişken yerine name'in kendisi unset edilecektir. Varsayılan değer -v seçeneğine eşdeğerdir. LINENO, MAILCHECK, OPTARG, OPTIND, RANDOM, SECONDS, TMOUT ve _ değişkenlerini unset etmek, sonradan kendilerine atama yapılsa bile özel anlamlarını ortadan kaldırır.

wait [ job ... ] Belirtilen işi bekler ve sonlanma durumunu (termination status) bildirir. job verilmezse, şu anda etkin olan tüm alt işlemler beklenir. Bu komutun çıkış durumu, job belirtilmişse beklenen son işlemin çıkış durumudur; aksi takdirde sıfırdır. job biçiminin açıklaması için İşler (Jobs) bölümüne bakın.

whence [ -afpv ] name ... Her bir name için, bir komut adı olarak kullanıldığında nasıl yorumlanacağını belirtir. -v seçeneği daha ayrıntılı bir rapor üretir. -f seçeneği fonksiyonların aranmasını atlar. -p seçeneği, name bir takma ad, fonksiyon veya ayrılmış sözcük olsa bile name için bir yol araması (path search) gerçekleştirir. -p seçeneği -v seçeneğini kapatır. -a seçeneği -v seçeneğine benzer ancak verilen adın tüm yorumlarının bildirilmesine neden olur.

Çağrılma (Invocation). Kabuk exec(2) ile çağrılırsa ve sıfırıncı argümanın ($0) ilk karakteri - ise, kabuğun bir oturum açma kabuğu (login shell) olduğu varsayılır ve komutlar sırasıyla /etc/profile dosyasından, ardından her iki dosya da mevcutsa geçerli dizindeki .profile dosyasından veya $HOME/.profile dosyasından okunur. Sonra, etkileşimli kabuklar için, dosya mevcutsa ENV ortam değişkeninin değeri üzerinde parametre genişletmesi, komut ikamesi ve aritmetik ikame gerçekleştirilerek adlandırılan dosyadan komutlar okunur. Eğer -s seçeneği mevcut değilse ve arg ile arg adında bir dosya mevcutsa, bu betiği (script) okur ve yürütür. Aksi takdirde, ilk arg bir / içermiyorsa, yürütülecek betiğin adını belirlemek için ilk arg üzerinde bir yol araması (path search) gerçekleştirilir. arg betiği yürütme iznine sahip olmalıdır ve tüm setuid ile setgid ayarları yoksayılacaktır. Eğer betik yolda bulunamazsa, arg yerleşik bir komut veya fonksiyonu adlandırmış gibi işlenir. Komutlar daha sonra aşağıda açıklandığı gibi okunur; kabuk çağrıldığında aşağıdaki seçenekler kabuk tarafından yorumlanır:

  • -D: Betiği yürütmez, ancak önünde $ olan çift tırnaklı dizgeler kümesini çıktı olarak verir. Bu dizgeler, betiğin farklı yerel ayarlara (locales) yerelleştirilmesi (localization) için gereklidir.

  • -E: Profillerden sonra, ENV değişkeni tarafından adlandırılan dosyayı veya tanımlanmamışsa $HOME/.kshrc dosyasını okur.

  • -c: Eğer -c seçeneği mevcutsa, komutlar ilk arg'den okunur. Kalan tüm argümanlar 0'dan başlayan konumsal parametreler haline gelir.

  • -s: Eğer -s seçeneği mevcutsa veya hiç argüman kalmamışsa, komutlar standart girdiden okunur. Kabuk çıktısı, yukarıda listelenen Özel Komutların çıktısı hariç olmak üzere, dosya tanımlayıcısı 2'ye yazılır.

  • -i: -i seçeneği mevcutsa veya kabuk girdisi ve çıktısı bir terminale bağlıysa (tcgetattr(2) tarafından bildirildiği üzere), o zaman bu kabuk etkileşimlidir. Bu durumda TERM yoksayılır (böylece kill 0 etkileşimli bir kabuğu öldürmez) ve INTR yakalanıp yoksayılır (böylece wait tamamlanır). Tüm durumlarda QUIT, kabuk tarafından yoksayılır.

  • -r: Eğer -r seçeneği mevcutsa, kabuk kısıtlı bir kabuktur.

  • -D: Önünde $ olan tüm çift tırnaklı dizgelerin bir listesi standart çıktıya yazdırılacak ve kabuk çıkacaktır. Bu dizgeler kümesi, yerel ayar C veya POSIX olmadığında dil çevirisine tabi tutulacaktır. Hiçbir komut yürütülmeyecektir.

  • -P: Eğer -P veya -o profile mevcutsa, kabuk bir profil kabuğudur (profile shell) (bkz. pfexec(1)).

-R filename -R filename seçeneği, değişkenler ve komutlar için tanımları ve referansları bulmak amacıyla ayrı bir yardımcı program tarafından kullanılabilecek bir çapraz referans veritabanı oluşturmak için kullanılır.

Kalan seçenekler ve argümanlar yukarıdaki set komutu altında açıklanmıştır. İlk argüman olarak isteğe bağlı bir - yoksayılır.

Yalnızca Rksh. Rksh, yetenekleri standart kabuğunkine göre daha fazla kontrol edilen oturum açma adları ve yürütme ortamları kurmak için kullanılır. Aşağıdakilerin yasaklanması dışında, rksh eylemleri ksh eylemleriyle tamamen aynıdır: Kısıtlı (restricted) seçeneğinin unset edilmesi. Dizin değiştirilmesi (bkz. cd(1)), SHELL, ENV, FPATH veya PATH değerinin veya özniteliklerinin ayarlanması veya unset edilmesi, / içeren yol veya komut adlarının belirtilmesi, Çıktının yönlendirilmesi (>, >|, <>, ve >>). Yerleşik (built-in) komutların eklenmesi veya silinmesi. Bir komutu çağırmak için command -p kullanılması.

Yukarıdaki kısıtlamalar, .profile ve ENV dosyaları yorumlandıktan sonra yürürlüğe girer.

Yürütülecek bir komutun bir kabuk yordamı (shell procedure) olduğu tespit edildiğinde, rksh bunu yürütmek için ksh'yi çağırır. Böylece, son kullanıcıya sınırlı bir komut menüsü sunulurken standart kabuğun tüm gücüne erişimi olan kabuk yordamları sağlamak mümkündür; bu şema son kullanıcının aynı dizinde yazma ve yürütme izinlerine sahip olmadığını varsayar.

Bu kuralların net etkisi, .profile yazarının, garantili kurulum eylemleri gerçekleştirerek ve kullanıcıyı uygun bir dizinde (muhtemelen oturum açma dizini olmayan) bırakarak kullanıcı eylemleri üzerinde tam kontrole sahip olmasıdır.

Sistem yöneticisi genellikle rksh tarafından güvenle çağrılabilecek bir komut dizini (örneğin, /usr/rbin) kurar.

Çıkış Durumu (Exit Status)

Kabuk tarafından tespit edilen sözdizimi hataları gibi hatalar, kabuğun sıfır dışı bir çıkış durumu döndürmesine neden olur. Kabuk etkileşimsiz olarak kullanılıyorsa, hata bir alt kabuk (subshell) içinde oluşmadığı sürece kabuk dosyasının yürütülmesi yarıda kesilir; alt kabuk içinde oluşursa alt kabuk yarıda kesilir. Aksi takdirde, kabuk yürütülen son komutun çıkış durumunu döndürür (ayrıca yukarıdaki exit komutuna da bakın). Kabuk tarafından tespit edilen çalışma zamanı hataları, komut veya fonksiyon adı ve hata durumu yazdırılarak bildirilir. Hatanın oluştuğu satır numarası birden büyükse, satır numarası komut veya fonksiyon adından sonra köşeli parantez içinde ([]) yazdırılır.

Dosyalar

/etc/profile Sistem genelindeki başlatma dosyası, oturum açma kabukları (login shells) için yürütülür.

$HOME/.profile Kişisel başlatma dosyası, oturum açma kabukları için /etc/profile dosyasından sonra yürütülür.

$HOME/..kshrc Varsayılan kişisel başlatma dosyası, ENV ayarlanmadığında etkileşimli kabuklar için yürütülür.

/etc/suid_profile Alternatif başlatma dosyası, gerçek ve etkin kullanıcı veya grup kimlikleri (id) eşleşmediğinde kişisel başlatma dosyası yerine yürütülür.

/dev/null Boş (NULL) aygıt

Ayrıca Bakınız

cat(1), cd(1), chmod(1), cut(1), egrep(1), echo(1), emacs(1), env(1), fgrep(1), gmacs(1), grep(1), newgrp(1), pfexec(1), stty(1), test(1), umask(1), vi(1), dup(2), exec(2), fork(2), getpwnam(3), ioctl(2), lseek(2), paste(1), pathconf(2), pipe(2), sysconf(2), umask(2), ulimit(2), wait(2), wctrans(3), rand(3), a.out(5), profile(5), environ(7).

Morris I. Bolsky ve David G. Korn, The New KornShell Command and Programming Language, Prentice Hall, 1995.

POSIX - Part 2: Shell and Utilities, IEEE Std 1003.2-1992, ISO/IEC 9945-2, IEEE, 1993.

Uvarılar (Caveats)

Bir komut yürütülürse ve ardından aynı ada sahip bir komut, arama yolunda orijinal komutun bulunduğu dizinden daha önceki bir dizine yüklenirse, kabuk orijinal komutu yürütmeye (exec) devam edecektir. Bu durumu düzeltmek için alias komutunun -t seçeneğini kullanın.

Bazı çok eski kabuk betikleri (shell scripts), boru (pipe) karakteri ⎪ için bir eşanlamlı olarak ^ içerir.

Bileşik bir komut (compound command) içinde hist yerleşik komutunun kullanılması, tüm komutun geçmiş dosyasından kaybolmasına neden olacaktır.

Yerleşik . dosya (. file) komutu, herhangi bir komut yürütülmeden önce dosyanın tamamını okur. Dolayısıyla, dosya içindeki alias ve unalias komutları, dosya içinde tanımlanan hiçbir komut için geçerli olmayacaktır.

Bir iş bir ön plan işlemini beklerken tuzaklar (traps) işlenmez. Bu nedenle, CHLD üzerindeki bir tuzak, ön plan işi sonlanana kadar yürütülmeycektir.

Belirli yerel ayarlarda (locales) virgülün ondalık nokta karakteri olarak yorumlanmasını önlemek için, aritmetik ifadelerde virgül işlecinden sonra bir boşluk bırakmak iyi bir fikirdir.

KSH(1)