Synopsis
dash [-aCefnuvxIimqVEb] [+aCefnuvxIimqVEb] [-o option_name] [+o option_name]
[command_file [argument ...]]
dash -c [-aCefnuvxIimqVEb] [+aCefnuvxIimqVEb] [-o option_name] [+o option_name] command_string
[command_name [argument ...]]
dash -s [-aCefnuvxIimqVEb] [+aCefnuvxIimqVEb] [-o option_name] [+o option_name] [argument ...]
Description
dash, sistem için standart komut yorumlayıcıdır. dash'in mevcut sürümü, kabuk için POSIX 1003.2 ve 1003.2a spesifikasyonlarına uyacak şekilde değiştirilme sürecindedir. Bu sürüm, bazı yönlerden Korn kabuğuna benzer görünmesini sağlayan birçok özelliğe sahiptir, ancak bir Korn kabuğu klonu değildir (bkz. ksh(1)). Bu kabuğa yalnızca POSIX tarafından belirlenen özellikler ve birkaç Berkeley uzantısı dahil edilmektedir. Bu kılavuz sayfasının amacı bir eğitim belgesi veya kabuğun eksiksiz bir spesifikasyonu olmak değildir.
Genel Bakış Kabuk, bir dosyadan veya terminalden satırları okuyan, bunları yorumlayan ve genellikle diğer komutları yürüten bir komuttur. Bir kullanıcı sisteme giriş yaptığında çalışan programdır (her ne kadar kullanıcı chsh(1) komutuyla farklı bir kabuk seçebilse de). Kabuk, veri depolamanın yanı sıra çeşitli özellikler sağlayan bir makro imkanı ile akış kontrol yapıları olan bir dili, yerleşik geçmiş (history) ve satır düzenleme yetenekleriyle birlikte uygular. Etkileşimli kullanımı kolaylaştırmak için birçok özellik barındırır ve yorumlamalı dilin hem etkileşimli hem de etkileşimsiz kullanımda (kabuk betikleri) ortak olması avantajına sahiptir. Yani, komutlar doğrudan çalışan kabuğa yazılabilir veya bir dosyaya konularak bu dosya doğrudan kabuk tarafından yürütülebilir.
Çalıştırma Eğer hiçbir argüman yoksa ve kabuğun standart girdisi bir terminale bağlıysa (veya -i bayrağı ayarlanmışsa) ve -c seçeneği mevcut değilse, kabuk etkileşimli bir kabuk olarak kabul edilir. Etkileşimli bir kabuk genellikle her komuttan önce bir bilgi istemi (prompt) görüntüler ve programlama ile komut hatalarını (aşağıda açıklandığı gibi) farklı şekilde ele alır. İlk başladığında kabuk argüman 0'ı inceler ve eğer bir tire ‘-’ karakteri ile başlıyorsa, kabuk aynı zamanda bir oturum açma (login) kabuğu olarak kabul edilir. Bu işlem normalde kullanıcı sisteme ilk giriş yaptığında sistem tarafından otomatik olarak gerçekleştirilir. Bir oturum açma kabuğu, eğer mevcutlarsa önce /etc/profile ve .profile dosyalarındaki komutları okur. Etkileşimli bir kabuğa girişte ENV çevre değişkeni ayarlanmışsa veya oturum açma kabuğunun .profile dosyasında ayarlanmışsa, kabuk daha sonra ENV içinde belirtilen dosyadan komutları okur. Bu nedenle, bir kullanıcı yalnızca oturum açma sırasında yürütülecek komutları .profile dosyasına ve her etkileşimli kabuk için yürütülecek komutları ENV dosyasına yerleştirmelidir. ENV değişkenini belirli bir dosyaya ayarlamak için, ev dizininizdeki .profile dosyanıza şu satırı ekleyin:
ENV=$HOME/.shinit; export ENV
“.shinit” yerine dilediğiniz bir dosya adını yazabilirsiniz.
Seçeneklerin yanı sıra komut satırı argümanları da belirtilmişse, kabuk ilk argümanı komutların okunacağı bir dosyanın adı (kabuk betiği) olarak kabul eder ve kalan argümanlar kabuğun konum parametreleri ($1, $2 vb.) olarak ayarlanır. Aksi takdirde, kabuk komutları kendi standart girdisinden okur.
Argüman Listesi İşleme Karşılık gelen bir adı olan tüm tek harfli seçenekler, -o seçeneğine bir argüman olarak kullanılabilir. set -o name ifadesi, aşağıdaki açıklamada tek harfli seçeneğin yanında verilmiştir. Tire “-” belirtmek seçeneği etkinleştirirken, artı “+” kullanmak seçeneği devre dışı bırakır. Aşağıdaki seçenekler komut satırından veya set yerleşik komutuyla (daha sonra açıklanacaktır) ayarlanabilir.
-a allexport: Atanan tüm değişkenleri dışa aktar (export et).-c: Komutları standart girdi yerine command_string işleneninden oku. Özel parametre 0 command_name işleneninden ayarlanacak ve konum parametreleri ($1, $2 vb.) kalan argüman işlenenlerinden ayarlanacaktır.-C noclobber: Mevcut dosyaların üzerine “>” ile yazma.-e errexit: Etkileşimli değilse, test edilmemiş herhangi bir komut başarısız olduğunda derhal çık. Bir komutun çıkış durumu, eğer komut bir if, elif, while veya until yapısını kontrol etmek için kullanılıyorsa ya da komut bir “&&” veya “||” operatörünün sol tarafındaki işlenense, açıkça test edilmiş kabul edilir.-f noglob: Yol adı genişletmesini devre dışı bırak.-n noexec: Etkileşimli değilse, komutları oku ancak yürütme. Bu, kabuk betiklerinin sözdizimini kontrol etmek için yararlıdır.-u nounset: Ayarlanmamış bir değişkeni genişletmeye çalışırken standart hataya bir mesaj yaz ve kabuk etkileşimli değilse derhal çık.-v verbose: Kabuk, girdisini okunduğu gibi standart hataya yazar. Hata ayıklama için yararlıdır.-x xtrace: Her komutu yürütülmeden önce standart hataya (önüne ‘+ ’ ekleyerek) yaz. Hata ayıklama için yararlıdır.-I ignoreeof: Etkileşimliyken girdiden gelen EOF'ları yoksay.-i interactive: Kabuğu etkileşimli davranmaya zorla.-l: dash'in sanki bir oturum açma (login) kabuğu olarak çağrılmış gibi davranmasını sağla.-m monitor: İş kontrolünü (job control) aç (etkileşimliyken otomatik olarak ayarlanır).-s stdin: Komutları standart girdiden oku (hiçbir dosya argümanı yoksa otomatik olarak ayarlanır). Kabuk çalışmaya başladıktan sonra (yani set ile) ayarlandığında bu seçeneğin hiçbir etkisi yoktur.-V vi: Yerleşik vi(1) komut satırı düzenleyicisini etkinleştir (eğer ayarlanmışsa -E'yi devre dışı bırakır).-E emacs: Yerleşik emacs(1) komut satırı düzenleyicisini etkinleştir (eğer ayarlanmışsa -V'yi devre dışı bırakır).-b notify: Arka plan işinin tamamlandığına dair asenkron bildirimi etkinleştir. (4.4alpha için UYGULANMAMIŞTIR)
Sözdizimsel Yapı Kabuk, girdileri bir dosyadan satırlar halinde okur ve bunları boşluklarda (boşluklar ve sekmeler) ve “operatörler” adı verilen kabuk için özel olan belirli karakter dizilerinde sözcüklere böler. İki tür operatör vardır: kontrol operatörleri ve yönlendirme operatörleri (bunların anlamları daha sonra tartışılacaktır). Aşağıda operatörlerin bir listesi bulunmaktadır:
Kontrol operatörleri: & && ( ) ; ;; | || <yenisatır>
Yönlendirme operatörleri: < > >| << >> <& >& <<- <>
Tırnak İçine Alma (Alıntılama) Tırnak içine alma, operatörler, boşluklar veya anahtar sözcükler gibi belirli karakterlerin veya sözcüklerin kabuk için sahip olduğu özel anlamı ortadan kaldırmak için kullanılır. Üç tür tırnak içine alma yöntemi vardır: eşleşen tek tırnaklar, eşleşen çift tırnaklar ve ters eğik çizgi.
Ters Eğik Çizgi (Backslash) Ters eğik çizgi, ⟨yenisatır⟩ (newline) hariç, takip eden karakterin harfi harfine (literal) anlamını korur. Bir ⟨yenisatır⟩ karakterinden önce gelen ters eğik çizgi, satır devamı olarak kabul edilir.
Tek Tırnak Karakterleri tek tırnak içine almak, tüm karakterlerin harfi harfine anlamını korur (tek tırnak hariç, bu da tek tırnak içine alınmış bir dizeye tek tırnak koymayı imkansız hale verir).
Çift Tırnak
Karakterleri çift tırnak içine almak, dolar işareti ($), ters tırnak () ve ters eğik çizgi (\) hariç tüm karakterlerin harfi harfine anlamını korur. Çift tırnak içindeki ters eğik çizgi tarihsel olarak tuhaftır ve yalnızca şu karakterleri tırnak içine almaya (kaçırmaya) yarar: $ " \ <yenisatır>.
Aksi takdirde harfi harfine kalır.
Ayrılmış Sözcükler Ayrılmış sözcükler, kabuk için özel bir anlama sahip olan ve bir satırın başında ya da bir kontrol operatöründen sonra tanınan sözcüklerdir. Aşağıdakiler ayrılmış sözcüklerdir:
! elif fi while case else for then { } do done until if esac
Bunların anlamları daha sonra tartışılacaktır.
Rumuzlar (Aliases) Rumuz, alias(1) yerleşik komutu kullanılarak ayarlanan bir ad ve buna karşılık gelen bir değerdir. Ayrılmış bir sözcüğün gelebileceği her durumda (yukarıya bakın) ve ayrılmış sözcükler kontrol edildikten sonra kabuk, sözcüğün bir rumuzla eşleşip eşleşmediğini kontrol eder. Eşleşiyorsa, girdi akışında onu kendi değeriyle değiştirir. Örneğin, “ls -F” değerine sahip “lf” adında bir rumuz varsa, şu girdi:
lf foobar ⟨return⟩
şuna dönüşür:
ls -F foobar ⟨return⟩
Rumuzlar, deneyimsiz kullanıcıların argümanlı fonksiyonlar oluşturmayı öğrenmek zorunda kalmadan komutlar için kısayollar oluşturmaları için pratik bir yol sunar. Ayrıca sözdizimsel olarak anlaşılması güç kodlar yazmak için de kullanılabilirler. Bu tür kullanım önerilmez.
Komutlar Kabuk, okuduğu sözcükleri bir dile göre yorumlar ve bu dilin spesifikasyonu bu kılavuz sayfasının kapsamı dışındadır (POSIX 1003.2 belgesindeki BNF'ye bakın). Ancak esasen, bir satır okunur ve satırın (veya bir kontrol operatöründen sonraki) ilk sözcüğü ayrılmış bir sözcük değilse, kabuk basit bir komut tanımış olur. Aksi takdirde, karmaşık bir komut veya başka bir özel yapı tanınmış olabilir.
Basit Komutlar Basit bir komut tanındığında kabuk aşağıdaki eylemleri gerçekleştirir:
“ad=değer” biçimindeki baştaki sözcükler ayıklanır ve basit komutun ortamına (environment) atanır. Yönlendirme operatörleri ve argümanları (aşağıda açıklandığı gibi) ayıklanır ve işlenmek üzere kaydedilir.
Kalan sözcükler “Genişletmeler” bölümünde açıklandığı gibi genişletilir ve kalan ilk sözcük komut adı olarak kabul edilerek komutun yeri bulunur. Kalan sözcükler komutun argümanları olarak kabul edilir. Herhangi bir komut adı ortaya çıkmazsa, 1. maddede tanınan “ad=değer” değişken atamaları mevcut kabuğu etkiler.
Yönlendirmeler bir sonraki bölümde açıklandığı gibi gerçekleştirilir.
Yönlendirmeler Yönlendirmeler, bir komutun girdisini nereden okuyacağını veya çıktısını nereye göndereceğini değiştirmek için kullanılır. Genel olarak yönlendirmeler, bir dosyaya olan mevcut bir referansı açar, kapatır veya çoğaltır. Yönlendirme için kullanılan genel biçim şöyledir:
[n] redir-op dosya
Burada redir-op, daha önce bahsedilen yönlendirme operatörlerinden biridir. Aşağıda olası yönlendirmelerin bir listesi bulunmaktadır. [n], bir dosya tanımlayıcısına (file descriptor) atıfta bulunan, ‘3’ örneğindeki gibi ( ‘[3]’ değil) 0 ile 9 arasında isteğe bağlı bir sayıdır.
[n]> dosya Standart çıktıyı (veya n'yi) dosyaya yönlendirir.
[n]>| dosya Aynısıdır, ancak -C seçeneğini geçersiz kılar.
[n]>> dosya Standart çıktıyı (veya n'yi) dosyanın sonuna ekler.
[n]< dosya Standart girdiyi (veya n'yi) dosyadan yönlendirir.
[n1]<&n2 Dosya tanımlayıcı n2'yi standart çıktı (veya fd n1) olarak kopyalar. fd n2.
[n]<- Standart girdiyi (veya n'yi) kapatır.
[n1]>&n2 Dosya tanımlayıcı n2'yi standart girdi (veya fd n1) olarak kopyalar. fd n2.
[n]>&- Standart çıktıyı (veya n'yi) kapatır.
[n]<> dosya Dosyayı standart girdi (veya n) üzerinde okuma ve yazma için açar.
Aşağıdaki yönlendirme genellikle “here-document” (burada-belgesi) olarak adlandırılır.
[n]<< sınırlayıcı here-doc-metni ... sınırlayıcı
Sınırlayıcıya kadar olan ardışık satırlardaki tüm metin kaydedilir ve standart girdi üzerindeki komuta veya belirtilmişse dosya tanımlayıcı n'ye sunulur. Başlangıç satırında belirtilen sınırlayıcı tırnak içine alınmışsa, here-doc-metni harfi harfine ele alınır; aksi takdirde metin parametre genişletmesine, komut ikamesine ve aritmetik genişletmeye tabi tutulur (“Genişletmeler” bölümünde açıklandığı gibi). Operatör “<<” yerine “<<-” ise, here-doc-metnindeki baştaki sekmeler (tab) ayıklanır.
Arama ve Yürütme Üç tür komut vardır: kabuk fonksiyonları, yerleşik (builtin) komutlar ve normal programlar – ve komut bu sırayla (adına göre) aranır. Her biri farklı bir şekilde yürütülür.
Bir kabuk fonksiyonu yürütüldüğünde, tüm kabuk konum parametreleri (değişmeden kalan $0 hariç) kabuk fonksiyonunun argümanlarına ayarlanır. Komutun ortamına açıkça yerleştirilen değişkenler (fonksiyon adından önce bunlara atamalar yerleştirilerek), fonksiyona yerel hale getirilir ve verilen değerlere ayarlanır. Ardından fonksiyon tanımında verilen komut yürütülür. Komut tamamlandığında konum parametreleri orijinal değerlerine geri döndürülür. Tüm bunlar mevcut kabuk içinde gerçekleşir.
Kabuk yerleşik komutları, yeni bir süreç (process) başlatılmadan kabuğun kendi içinde yürütülür.
Aksi takdirde, komut adı bir fonksiyon veya yerleşik komutla eşleşmiyorsa, komut dosya sisteminde normal bir program olarak aranır (bir sonraki bölümde açıklandığı gibi). Normal bir program yürütüldüğünde kabuk, argümanları ve ortamı programa aktararak programı çalıştırır. Program normal bir yürütülebilir dosya değilse (yani ASCII temsili "#!" olan "sihirli sayı" ile başlamıyorsa ve bu yüzden execve(2) ENOEXEC döndürüyorsa), kabuk programı bir alt kabukta yorumlayacaktır. Alt kabuk bu durumda kendisini yeniden başlatır, böylece etki, geçici kabuk betiğini işlemek üzere yeni bir kabuk çağrılmış gibi olur; tek fark, üst kabukta bulunan hash'lenmiş komutların konumunun alt kabuk tarafından hatırlanacak olmasıdır.
Bu belgenin ve kaynak kodun önceki sürümlerinin, sihirli sayı içermeyen bir kabuk betiğine yanıltıcı ve seyrek bir şekilde "kabuk prosedürü" (shell procedure) olarak atıfta bulunduğunu unutmayın.
Yol Arama Kabuk bir komutun yerini tespit ederken, önce bu adda bir kabuk fonksiyonu olup olmadığına bakar. Ardından bu adda yerleşik bir komut arar. Yerleşik bir komut bulunamazsa, iki şeyden biri gerçekleşir:
Eğik çizgi (slash) içeren komut adları, herhangi bir arama yapılmadan doğrudan yürütülür.
Kabuk, komut için PATH içindeki her girdiyi sırasıyla arar. PATH değişkeninin değeri, iki nokta üst üste ile ayrılmış bir dizi girdi olmalıdır. Her girdi bir dizin adından oluşur. Mevcut dizin, boş bir dizin adıyla dolaylı olarak veya tek bir nokta ile açıkça belirtilebilir.
Komut Çıkış Durumu Her komutun, diğer kabuk komutlarının davranışını etkileyebilecek bir çıkış durumu (exit status) vardır. Kural şudur: Bir komut normal veya başarı durumu için sıfır ile, başarısızlık, hata veya yanlış bir gösterge için sıfır dışı bir değerle çıkar. Her komutun kılavuz sayfası, çeşitli çıkış kodlarını ve bunların ne anlama geldiğini belirtmelidir. Ek olarak, yerleşik komutlar ve yürütülen bir kabuk fonksiyonu da çıkış kodları döndürür.
Bir komut tamamen değişken atamalarından oluşuyorsa, komutun çıkış durumu varsa son komut ikamesinin çıkış durumudur, aksi takdirde 0'dır.
Karmaşık Komutlar Karmaşık komutlar, basit komutların kontrol operatörleri veya ayrılmış sözcüklerle birleştirilerek daha büyük bir karmaşık komut oluşturmasıdır. Daha genel olarak, bir komut aşağıdakilerden biridir:
• basit komut
• boru hattı (pipeline)
• liste veya bileşik liste (compound-list)
• bileşik komut (compound command)
• fonksiyon tanımı
Aksi belirtilmedikçe, bir komutun çıkış durumu, o komut tarafından yürütülen son basit komutun çıkış durumudur.
Boru Hatları (Pipelines) Boru hattı, kontrol operatörü | ile ayrılmış bir veya daha fazla komutun dizisidir. Son komut dışındaki tüm komutların standart çıktısı, bir sonraki komutun standart girdisine bağlanır. Son komutun standart çıktısı, her zamanki gibi kabuktan miras alınır.
Boru hattının biçimi şöyledir:
[!] komut1 [| komut2 ...]
komut1'in standart çıktısı komut2'nin standart girdisine bağlanır. Bir komutun standart girdisi, standart çıktısı veya her ikisi, komutun bir parçası olan yönlendirme operatörleri tarafından belirtilen herhangi bir yönlendirmeden önce boru hattı tarafından atanmış kabul edilir.
Boru hattı arka planda değilse (daha sonra tartışılacaktır), kabuk tüm komutların tamamlanmasını bekler.
Eğer boru hattının önünde ünlem işareti ! ayrılmış sözcüğü yoksa, çıkış durumu boru hattında belirtilen son komutun çıkış durumudur. Aksi takdirde çıkış durumu, son komutun çıkış durumunun mantıksal DEĞİL (NOT) halidir. Yani, son komut sıfır döndürürse çıkış durumu 1; son komut sıfırdan büyük bir değer döndürürse çıkış durumu sıfırdır.
Standart girdi veya standart çıktı ya da her ikisinin boru hattı ataması yönlendirmeden önce gerçekleştiği için yönlendirme ile değiştirilebilir. Örneğin:
$ komut1 2>&1 | komut2
komut1'in hem standart çıktısını hem de standart hatasını komut2'nin standart girdisine gönderir.
Bir ; veya ⟨yenisatır⟩ sonlandırıcısı, önceki VE-VEYA (AND-OR) listesinin (bir sonraki bölümde açıklanmıştır) sıralı olarak yürütülmesine neden olur; bir & işareti, önceki VE-VEYA listesinin asenkron olarak yürütülmesine neden olur.
Diğer bazı kabukların aksine, boru hattındaki her sürecin, çağıran kabuğun bir alt süreci (child) olduğunu unutmayın (yerleşik bir kabuk komutu olmadığı sürece; bu durumda mevcut kabukta yürütülür – ancak ortam üzerindeki tüm etkileri silinir).
Arka Plan Komutları – & Bir komut ampersand (&) kontrol operatörü ile sonlandırılırsa, kabuk komutu asenkron olarak yürütür; yani kabuk, bir sonraki komutu yürütmek için bu komutun bitmesini beklemez.
Bir komutu arka planda çalıştırma biçimi şöyledir:
komut1 & [komut2 & ...]
Kabuk etkileşimli değilse, asenkron bir komutun standart girdisi /dev/null olarak ayarlanır.
Listeler – Genel Olarak Bir liste, yeni satırlar, noktalı virgüller veya ampersand işaretleri ile ayrılmış ve isteğe olarak bu üç karakterden biriyle sonlandırılmış sıfır veya daha fazla komut dizisidir. Bir listedeki komutlar yazıldıkları sırayla yürütülür. Komuttan sonra bir ampersand gelirse, kabuk komutu başlatır ve hemen bir sonraki komuta geçer; aksi takdirde bir sonrakine geçmeden önce komutun sonlanmasını bekler.
Kısa Devre Liste Operatörleri “&&” ve “||” VE-VEYA (AND-OR) liste operatörleridir. “&&”, ilk komutu yürütür ve ardından yalnızca ve yalnızca ilk komutun çıkış durumu sıfır ise ikinci komutu yürütür. “||” benzerdir, ancak yalnızca ve yalnızca ilk komutun çıkış durumu sıfır dışı ise ikinci komutu yürütür. “&&” ve “||” operatörlerinin her ikisi de aynı önceliğe sahiptir.
Akış Kontrol Yapıları – if, while, for, case if komutunun sözdizimi şöyledir:
if liste then liste [ elif liste then liste ] ... [ else liste ] fi
while komutunun sözdizimi şöyledir:
while liste do liste done
İlk listenin çıkış durumu sıfır olduğu sürece iki liste tekrar tekrar yürütülür. until komutu da benzerdir, ancak while yerine until sözcüğü bulunur ve bu da ilk listenin çıkış durumu sıfır olana kadar tekrarlanmasına neden olur.
for komutunun sözdizimi şöyledir:
for değişken [ in [ sözcük ... ] ] do liste done
in sözcüğünü takip eden sözcükler genişletilir ve ardından liste, değişken sırasıyla her bir sözcüğe ayarlanarak tekrar tekrar yürütülür. in word ... kısmının atlanması in "$@" ile eşdeğerdir.
break ve continue komutlarının sözdizimi şöyledir:
break [ num ] continue [ num ]
Break, en içteki num adet for veya while döngüsünü sonlandırır. Continue, en içteki döngünün bir sonraki yinelemesiyle devam eder. Bunlar yerleşik komutlar olarak uygulanmıştır.
case komutunun sözdizimi şöyledir:
case sözcük in [(]desen) liste ;; ... esac
Desen aslında “|” karakterleriyle ayrılmış bir veya daha fazla desen (daha sonra açıklanan Kabuk Desenleri bölümüne bakın) olabilir. Desenden önceki “(” karakteri isteğe bağlıdır.
Komutları Gruplama Komutlar şu şekilde yazılarak gruplanabilir:
(liste)
veya
{ liste; }
Bunlardan ilki, komutları bir alt kabukta yürütür. Bir (liste) içinde gruplanan yerleşik komutlar mevcut kabuğu etkilemez. İkinci biçim başka bir kabuk çatallamadığı (fork etmediği) için biraz daha verimlidir. Komutları bu şekilde gruplamak, çıktılarını tek bir programmış gibi yönlendirmenize olanak tanır:
{ printf " hello " ; printf " world\n" ; } > greeting
“}” karakterinin, ayrılmış bir sözcük olarak tanınması ve başka bir komut argümanı olarak kabul edilmemesi için bir kontrol operatörünü (burada “;”) takip etmesi gerektiğini unutmayın.
Fonksiyonlar Bir fonksiyon tanımının sözdizimi şöyledir:
ad () komut
Bir fonksiyon tanımı yürütülebilir bir ifadedir; yürütüldüğünde ad adında bir fonksiyon tanımlar (yükler) ve sıfır çıkış durumu döndürür. Komut normalde “{” ve “}” arasına alınmış bir listedir.
Değişkenler, local komutu kullanılarak bir fonksiyona yerel olarak bildirilebilir. Bu, bir fonksiyonun ilk ifadesi olmalıdır ve sözdizimi şöyledir:
local [değişken | -] ...
Local yerleşik bir komut olarak uygulanmıştır.
Bir değişken yerel yapıldığında, varsa çevreleyen kapsamdaki aynı adlı değişkenden başlangıç değerini, dışa aktarılan (exported) ve salt okunur (readonly) bayraklarını miras alır. Aksi takdirde, değişken başlangıçta ayarlanmamış olur. Kabuk dinamik kapsam belirleme (dynamic scoping) kullanır; dolayısıyla x değişkenini f fonksiyonuna yerel yaparsanız ve f de g fonksiyonunu çağırırsa, g içinde x değişkenine yapılan atıflar, x adındaki genel değişkene değil, f içinde bildirilen x değişkenine atıfta bulunacaktır.
Yerel yapılabilen tek özel parametre “-” parametresidir. “-” parametresini yerel yapmak, fonksiyon içinde set komutu aracılığıyla değiştirilen tüm kabuk seçeneklerinin, fonksiyon geri döndüğünde orijinal değerlerine geri yüklenmesini sağlar.
return komutunun sözdizimi şöyledir:
return [çıkış_durumu]
Şu anda yürütülmekte olan fonksiyonu sonlandırır. Return yerleşik bir komut olarak uygulanmıştır.
Değişkenler ve Parametreler Kabuk bir dizi parametre tutar. Bir adla belirtilen parametreye değişken denir. Başlarken kabuk, tüm çevre değişkenlerini kabuk değişkenlerine dönüştürür. Yeni değişkenler şu biçim kullanılarak ayarlanabilir:
ad=değer
Kullanıcı tarafından ayarlanan değişkenlerin adı yalnızca harflerden, sayılardan ve alt çizgilerden oluşmalı ve ilki sayı olmamalıdır. Bir parametre aşağıda açıklandığı gibi bir sayı veya özel bir karakterle de belirtilebilir.
Konum Parametreleri Konum parametresi, bir sayı (n > 0) ile belirtilen bir parametredir. Kabuk bunları başlangıçta, kabuk betiğinin adını takip eden komut satırı argümanlarının değerlerine ayarlar. set yerleşik komutu da bunları ayarlamak veya sıfırlamak için kullanılabilir.
Özel Parametreler Özel parametre, aşağıdaki özel karakterlerden biriyle belirtilen bir parametredir. Parametrenin değeri karakterinin yanında listelenmiştir.
Birinciden başlayarak konum parametrelerine genişler. Genişletme çift tırnaklı bir dize içinde gerçekleştiğinde, IFS değişkeninin ilk karakteriyle veya IFS ayarlanmamışsa ⟨boşluk⟩ karakteriyle ayrılmış her parametrenin değerini içeren tek bir alana genişler.
@ Birinciden başlayarak konum parametrelerine genişler. Genişletme çift tırnak içinde gerçekleştiğinde, her konum parametresi ayrı bir argüman olarak genişler. Hiçbir konum parametresi yoksa, @ çift tırnak içine alınmış olsa bile @ genişletmesi sıfır argüman üretir. Bunun temel anlamı, örneğin $1 “abc” ve $2 “def ghi” ise, "$@" ifadesinin şu iki argümana genişlemesidir:
"abc" "def ghi"
Konum parametrelerinin sayısına genişler.
? En son yürütülen boru hattının çıkış durumuna genişler.
- (Tire.) Başlatma sırasında, set yerleşik komutuyla veya kabuk tarafından dolaylı olarak belirtilen mevcut seçenek bayraklarına (bir dize halinde birleştirilmiş tek harfli seçenek adları) genişler.
$ Çağrılan kabuğun süreç kimliğine (process ID) genişler. Bir alt kabuk (subshell), üst kabuğuyla aynı $ değerini korur.
! Mevcut kabuktan yürütülen en son arka plan komutunun süreç kimliğine (process ID) genişler. Bir boru hattı için süreç kimliği, boru hattındaki son komutun süreç kimliğidir.
0 (Sıfır.) Kabuğun veya kabuk betiğinin adına genişler.
Sözcük Genişletmeleri Bu madde, sözcükler üzerinde gerçekleştirilen çeşitli genişletmeleri açıklar. Daha sonra açıklanacağı üzere, tüm genişletmeler her sözcük üzerinde gerçekleştirilmez.
Tek bir sözcük içinde gerçekleşen tilde genişletmeleri, parametre genişletmeleri, komut ikameleri, aritmetik genişletmeler ve tırnak işaretlerinin kaldırılması tek bir alana genişler. Yalnızca alan bölme (field splitting) veya yol adı genişletmesi (pathname expansion) tek bir sözcükten birden fazla alan oluşturabilir. Bu kuralın tek istisnası, yukarıda açıklandığı gibi çift tırnak içindeki @ özel parametresinin genişletilmesidir.
Sözcük genişletme sırası şöyledir:
Tilde Genişletmesi, Parametre Genişletmesi, Komut İkamesi, Aritmetik Genişletme (bunların hepsi aynı anda gerçekleşir).
IFS değişkeni boş (null) olmadığı sürece, 1. adımda üretilen alanlar üzerinde Alan Bölme (Field Splitting) gerçekleştirilir.
Yol Adı Genişletmesi (set -f yürürlükte değilse).
Tırnak İşaretlerinin Kaldırılması (Quote Removal).
$ karakteri; parametre genişletmesini, komut ikamesini veya aritmetik değerlendirmeyi başlatmak için kullanılır.
Tilde Genişletmesi (Kullanıcı ev dizininin yerleştirilmesi) Tırnak içine alınmamış bir tilde karakteri (~) ile başlayan bir sözcük tilde genişletmesine tabi tutulur. Bir eğik çizgiye (/) veya sözcüğün sonuna kadar olan tüm karakterler bir kullanıcı adı olarak kabul edilir ve kullanıcının ev diziniyle değiştirilir. Kullanıcı adı eksikse ( ~/foobar örneğindeki gibi), tilde karakteri HOME değişkeninin değeriyle (mevcut kullanıcının ev dizini) değiştirilir.
Parametre Genişletmesi Parametre genişletme biçimi aşağıdaki gibidir:
${ifade}
Burada ifade, eşleşen “}” karakterine kadar olan tüm karakterlerden oluşur. Ters eğik çizgiyle kaçırılmış veya tırnak içine alınmış bir dize içindeki herhangi bir “}” karakteri ile gömülü aritmetik genişletmeler, komut ikameleri ve değişken genişletmelerindeki karakterler, eşleşen “}” karakteri belirlenirken incelenmez.
Parametre genişletmenin en basit biçimi şöyledir:
${parametre}
Parametrenin varsa değeri ikame edilir (yerine konur).
Parametre adı veya sembolü, birden fazla basamaklı konum parametreleri hariç veya parametreyi adın bir parçası olarak yorumlanabilecek bir karakter takip etmediği sürece isteğe bağlı olan süslü parantez içine alınabilir. Bir parametre genişletmesi çift tırnak içinde gerçekleşirse:
Genişletme sonuçları üzerinde yol adı genişletmesi gerçekleştirilmez.
@ hariç olmak üzere, genişletme sonuçları üzerinde alan bölme gerçekleştirilmez.
Ek olarak, bir parametre genişletmesi aşağıdaki biçimlerden biri kullanılarak değiştirilebilir.
${parameter:-word} Varsayılan Değerleri Kullanır. parameter ayarlanmamış veya boş (null) ise, word genişletmesi ikame edilir; aksi takdirde parameter değeri ikame edilir.
${parameter:=word} Varsayılan Değerleri Atar. parameter ayarlanmamış veya boş ise, word genişletmesi parameter değişkenine atanır. Her durumda, parameter değişkeninin son değeri ikame edilir. Bu şekilde yalnızca değişkenler atanabilir, konum parametreleri veya özel parametreler atanamaz.
${parameter:?[word]} Boş veya Ayarlanmamışsa Hata Bildirir. parameter ayarlanmamış veya boş ise, word genişletmesi (veya word atlanmışsa ayarlanmamış olduğunu belirten bir mesaj) standart hataya yazılır ve kabuk sıfır dışı bir çıkış durumuyla çıkar. Aksi takdirde, parameter değeri ikame edilir. Etkileşimli bir kabuğun çıkması gerekmez.
${parameter:+word} Alternatif Değer Kullanır. parameter ayarlanmamış veya boş ise, boş (null) ikame edilir; aksi takdirde, word genişletmesi ikame edilir.
Yukarıda gösterilen parametre genişletmelerinde, biçimde iki nokta üst üste kullanılması ayarlanmamış veya boş olan bir parametrenin test edilmesiyle sonuçlanır; iki nokta üst üste kullanılmaması ise yalnızca ayarlanmamış olan bir parametrenin test edilmesiyle sonuçlanır.
${#parameter} Dize Uzunluğu. parameter değerinin karakter cinsinden uzunluğu.
Aşağıdaki dört parametre genişletme çeşidi alt dize (substring) işlemeyi sağlar. Her durumda, desenleri değerlendirmek için düzenli ifade (regular expression) gösterimi yerine desen eşleme gösterimi (bkz. Kabuk Desenleri) kullanılır. parameter değişkeni * veya @ ise, genişletmenin sonucu belirsizdir. Tüm parametre genişletme dizesinin çift tırnak içine alınması, aşağıdaki dört desen karakteri çeşidinin tırnak içine alınmasına neden olmaz, oysa süslü parantezler içindeki karakterlerin tırnak içine alınması bu etkiye sahiptir.
${parameter%word} En Küçük Son ek Desenini Kaldırır. word bir desen üretmek üzere genişletilir. Parametre genişletmesi, desenle eşleşen son ekin en küçük kısmının silindiği parameter değeriyle sonuçlanır.
${parameter%%word} En Büyük Son ek Desenini Kaldırır. word bir desen üretmek üzere genişletilir. Parametre genişletmesi, desenle eşleşen son ekin en büyük kısmının silindiği parameter değeriyle sonuçlanır.
${parameter#word} En Küçük Ön ek Desenini Kaldırır. word bir desen üretmek üzere genişletilir. Parametre genişletmesi, desenle eşleşen ön ekin en küçük kısmının silindiği parameter değeriyle sonuçlanır.
${parameter##word} En Büyük Ön ek Desenini Kaldırır. word bir desen üretmek üzere genişletilir. Parametre genişletmesi, desenle eşleşen ön ekin en büyük kısmının silindiği parameter değeriyle sonuçlanır.
Komut İkamesi Komut ikamesi, bir komutun çıktısının komut adının kendisinin yerine konmasını sağlar. Komut ikamesi, komut aşağıdaki gibi kapatıldığında gerçekleşir:
$(komut)
veya (“ters tırnaklı” sürüm):
komut
Kabuk, komutu bir alt kabuk ortamında yürüterek komut ikamesini genişletir ve komut ikamesini komutun standart çıktısıyla değiştirerek ikamenin sonundaki bir veya daha fazla ⟨yenisatır⟩ dizisini kaldırır. (Çıktının sonundan önceki gömülü ⟨yenisatır⟩'lar kaldırılmaz; ancak alan bölme sırasında, IFS değerine ve yürürlükte olan tırnak içine alma durumuna bağlı olarak ⟨boşluk⟩ karakterlerine dönüştürülebilirler.)
Aritmetik Genişletme Aritmetik genişletme, aritmetik bir ifadeyi değerlendirmek ve değerini ikame etmek için bir mekanizma sağlar. Aritmetik genişletme biçimi aşağıdaki gibidir:
$((ifade))
İfade içindeki çift tırnak işareti özel olarak ele alınmaması haricinde, ifade sanki çift tırnak içindeymiş gibi ele alanır. Kabuk, ifadedeki tüm belirteçleri (tokens) parametre genişletmesi, komut ikamesi ve tırnak işaretlerinin kaldırılması için genişletir.
Ardından kabuk bunu aritmetik bir ifade olarak ele alır ve ifadenin değerini ikame eder.
Boşluk Bölme (Alan Bölme) Parametre genişletmesi, komut ikamesi ve aritmetik genişletmeden sonra kabuk, çift tırnak içinde gerçekleşmeyen genişletme ve ikame sonuçlarını alan bölme için tarar ve birden fazla alan ortaya çıkabilir.
Kabuk, IFS içindeki her bir karakteri bir sınırlayıcı olarak ele alır ve parametre genişletmesi ile komut ikamesinin sonuçlarını alanlara bölmek için bu sınırlayıcıları kullanır.
Yol Adı Genişletmesi (Dosya Adı Üretimi) -f bayrağı ayarlanmadığı sürece, sözcük bölme işlemi tamamlandıktan sonra dosya adı üretimi gerçekleştirilir. Her sözcük, eğik çizgilerle ayrılmış bir dizi desen olarak görülür. Genişletme süreci, sözcüğü, her deseni belirtilen desenle eşleşen bir dizeyle değiştirerek oluşturulabilecek tüm mevcut dosyaların adlarıyla değiştirir. Bununla ilgili iki kısıtlama vardır: birincisi, bir desen eğik çizgi içeren bir dizeyle eşleşemez; ikincisi, desenin ilk karakteri nokta olmadığı sürece, bir desen nokta ile başlayan bir dizeyle eşleşemez. Bir sonraki bölümde hem Yol Adı Genişletmesi hem de case komutu için kullanılan desenler açıklanmaktadır.
Kabuk Desenleri Bir desen, kendileriyle eşleşen normal karakterlerden ve meta-karakterlerden oluşur. Meta-karakterler “!”, “*”, “?” ve “[” karakterleridir. Bu karakterler tırnak içine alınırlarsa özel anlamlarını kaybederler. Komut veya değişken ikamesi gerçekleştirildiğinde ve dolar işareti veya ters tırnaklar çift tırnak içine alınmadığında, değişkenin değeri veya komutun çıktısı bu karakterler için taranır ve bunlar meta-karakterlere dönüştürülür.
Bir yıldız işareti (“*”) herhangi bir karakter dizisiyle eşleşir. Bir soru işareti herhangi bir tek karakterle eşleşir. Sol köşeli parantez (“[”) bir karakter sınıfı başlatır. Karakter sınıfının sonu bir (“]”) ile belirtilir; “]” eksikse, “[” bir karakter sınıfı başlatmak yerine bir “[” karakteri ile eşleşir. Bir karakter sınıfı, köşeli parantezler arasındaki karakterlerden herhangi biriyle eşleşir. Bir eksi işareti kullanılarak bir karakter aralığı belirtilebilir. Karakter sınıfının ilk karakteri ünlem işareti yapılarak karakter sınıfı tümleyenine dönüştürülebilir.
Bir karakter sınıfına “]” karakterini dahil etmek için, onu listelenen ilk karakter yapın (varsa “!” karakterinden sonra). Bir eksi işareti dahil etmek için, onu listelenen ilk veya son karakter yapın.
Yerleşik Komutlar (Builtins) Bu bölüm, ayrı bir süreç tarafından gerçekleştirilemeyecek bazı işlemleri gerçekleştirmeleri gerektiği için yerleşik olan yerleşik komutları listeler. Bunlara ek olarak, verimlilik sağlamak amacıyla yerleşik olabilen birkaç başka komut daha vardır (örneğin printf(1), echo(1), test(1) vb.).
:
true Giriş değeri 0 (doğru) döndüren boş bir komut.
. dosya Belirtilen dosyadaki komutlar kabuk tarafından okunur ve yürütülür.
alias [ad[=dize ...]] ad=dize belirtilmişse kabuk, dize değerine sahip ad rumuzunu tanımlar. Yalnızca ad belirtilmişse, ad rumuzunun değeri yazdırılır. Hiçbir argüman verilmediğinde, alias yerleşik komutu tanımlanmış tüm rumuzların adlarını ve değerlerini yazdırır (bkz. unalias).
bg [iş] ... Belirtilen işleri (veya hiçbir iş verilmemişse mevcut işi) arka planda devam ettirir.
command [-p] [-v] [-V] komut [arg ...] Belirtilen komutu yürütür ancak onu ararken kabuk fonksiyonlarını yoksayar. (Bu, yerleşik bir komutla aynı ada sahip bir kabuk fonksiyonunuz olduğunda yararlıdır.)
-p: Tüm standart yardımcı programların bulunmasını garanti eden bir PATH kullanarak komutu arar.-V: Komutu yürütmez ancak komutu arar ve komut arama sonucunun çözünürlüğünü yazdırır. Bu, type yerleşik komutu ile aynıdır.-v: Komutu yürütmez ancak komutu arar ve yardımcı programların mutlak yol adını, yerleşiklerin adını veya rumuzların genişletilmiş halini yazdırır.
cd -
cd [-LP] [dizin] Belirtilen dizine geçer (varsayılan HOME). cd komutunun ortamında bir CDPATH girdisi görünüyorsa veya CDPATH kabuk değişkeni ayarlanmışsa ve dizin adı bir eğik çizgiyle başlamıyorsa, belirtilen dizin için CDPATH içinde listelenen dizinler aranır. CDPATH biçimi PATH biçimiyle aynıdır. Argüman olarak tek bir tire belirtilirse, bu OLDPWD değeriyle değiştirilir. cd komutu, kullanıcının verdiğinden farklı bir dizine geçmişse, aslında geçtiği dizinin adını yazdırır. Bunlar, CDPATH mekanizmasının kullanılması veya argümanın tek bir tire olması nedeniyle farklı olabilir. -P seçeneği fiziksel dizin yapısının kullanılmasını sağlar, yani tüm sembolik bağlantılar kendi değerlerine çözümlenir. -L seçeneği, önceki -P seçeneklerinin etkisini kapatır.
echo [-n] argümanlar... Argümanları aralarında boşluk olacak şekilde standart çıktıya yazdırır. -n seçeneği mevcut olmadığı sürece, argümanların ardından bir yeni satır çıktısı verilir.
Çıktı sırasında aşağıdaki karakter dizilerinden herhangi biriyle karşılaşılırsa, bu dizi yazdırılmaz. Bunun yerine belirtilen eylem gerçekleştirilir:
\b Bir geri alma (backspace) karakteri yazdırılır.
\c Sonraki çıktılar bastırılır. Bu normalde, echo'nun aksi takdirde vereceği sondaki yeni satırı bastırmak için son argümanın sonunda kullanılır.
\f Bir form besleme (form feed) çıktısı verir.
\n Bir yeni satır karakteri yazdırır.
\r Bir satır başı (carriage return) karakteri yazdırır.
\t Bir (yatay) sekme (tab) karakteri yazdırır.
\v Bir dikey sekme yazdırır.
\0rakamlar Değeri sıfır ila üç oktal rakamla verilen karakteri yazdırır. Rakam yoksa, bir nul karakteri yazdırılır.
\ Bir ters eğik çizgi yazdırır.
Diğer tüm ters eğik çizgi dizileri tanımlanmamış davranışa yol açar.
eval dize ... Tüm argümanları boşluklarla birleştirir. Ardından komutu yeniden ayrıştırır ve yürütür.
exec [komut argüman ...] komut atlanmadığı sürece kabuk süreci, belirtilen programla değiştirilir (bu bir kabuk yerleşiği veya fonksiyonu değil, gerçek bir program olmalıdır). exec komutundaki tüm yönlendirmeler kalıcı olarak işaretlenir, böylece exec komutu bittiğinde geri alınmazlar.
exit [çıkış_durumu] Kabuk sürecini sonlandırır. çıkış_durumu verilmişse kabuğun çıkış durumu olarak kullanılır; aksi takdirde önceki komutun çıkış durumu kullanılır.
export ad ...
export -p Belirtilen adlar, sonraki komutların ortamında görünecek şekilde dışa aktarılır (export edilir). Bir değişkeni dışa aktarmayı iptal etmenin tek yolu onu unset etmektir. Kabuk, bir değişkenin değerinin dışa aktarıldığı sırada şu şekilde yazarak ayarlanmasına izin verir:
export ad=değer
Hiçbir argüman verilmediğinde export komutu dışa aktarılan tüm değişkenlerin adlarını listeler. -p seçeneği belirtildiğinde çıktı, etkileşimsiz kullanım için uygun şekilde biçimlendirilir.
fc [-e düzenleyici] [ilk [son]]
fc -l [-nr] [ilk [son]]
fc -s [eski=yeni] [ilk] fc yerleşik komutu, etkileşimli bir kabüğe daha önce girilmiş komutları listeler veya düzenler ve yeniden yürütür.
-e düzenleyici Komutları düzenlemek için düzenleyici ile belirtilen düzenleyiciyi kullanır. Düzenleyici dizesi, PATH değişkeni aracılığıyla aramaya tabi tutulan bir komut adıdır. -e belirtilmediğinde FCEDIT değişkenindeki değer varsayılan olarak kullanılır. FCEDIT boş veya ayarlanmamışsa, EDITOR değişkeninin değeri kullanılır. EDITOR boş veya ayarlanmamışsa, düzenleyici olarak ed(1) kullanılır.
-l (ell) Komutlar üzerinde bir düzenleyici çağırmak yerine onları listeler. Komutlar, her komutun önünde komut numarası olacak şekilde, -r'den etkilenen ilk ve son işlenenler tarafından belirtilen sırayla yazılır.
-n: -l ile listelerken komut numaralarını bastırır.-r: Listelenen ( -l ile) veya düzenlenen (ne -l ne de -s ile) komutların sırasını tersine çevirir.-s: Bir düzenleyici çağırmadan komutu yeniden yürütür.
ilk
son Listelenecek veya düzenlenecek komutları seçer. Erişilebilen önceki komutların sayısı HISTSIZE değişkeninin değeriyle belirlenir. ilk veya son ya da her ikisinin değeri aşağıdakilerden biridir:
[+]sayı Bir komut numarasını temsil eden pozitif bir sayı; komut numaraları -l seçeneği ile görüntülenebilir.
-sayı Komutun sayı kadar komut öncesinde yürütüldüğünü temsil eden negatif bir ondalık sayı. Örneğin, -1 hemen önceki komuttur.
dize Bu dizeyle başlayan en son girilen komutu belirten bir dize. eski=yeni işleneni -s ile birlikte belirtilmemişse, ilk işlenenin dize biçimi gömülü bir eşittir işareti içeremez.
Aşağıdaki çevre değişkenleri fc'nin yürütülmesini etkiler:
FCEDIT Kullanılacak düzenleyicinin adı.
HISTSIZE Erişilebilir olan önceki komutların sayısı.
fg [iş] Belirtilen işi veya mevcut işi ön plana taşır.
getopts optstring var Bell Labs türevi getopt(1) ile karıştırılmaması gereken POSIX getopts komutu.
İlk argüman bir dizi harf olmalıdır ve seçeneğin bir argüman gerektirdiğini belirtmek için her birinin ardından isteğe bağlı olarak bir iki nokta üst üste gelebilir. Belirtilen değişken, ayrıştırılan seçeneğe ayarlanır.
getopts komutu, boşluk içeren argümanları ele alma biçimi nedeniyle eski getopt(1) yardımcı programını kullanımdan kaldırır.
getopts yerleşik komutu, bir parametre listesinden seçenekleri ve argümanlarını elde etmek için kullanılabilir. Çağrıldığında getopts, listedeki seçenek dizesinden bir sonraki seçeneğin değerini var ile belirtilen kabuk değişkenine ve dizinini de OPTIND kabuk değişkenine yerleştirir. Kabuk çağrıldığında OPTIND 1 olarak başlatılır. Bir argüman gerektiren her seçenek için getopts yerleşik komutu, onu OPTARG kabuk değişkenine yerleştirecektir. Bir seçeneğe optstring içinde izin verilmiyorsa, OPTARG unset edilecek (silinecek)tir.
optstring, tanınan seçenek harflerinden oluşan bir dizedir (bkz. getopt(3)). Bir harfin ardından iki nokta üst üste geliyorsa, seçeneğin boşlukla ayrılmış veya ayrılmamış olabilecek bir argümanı olması beklenir. Beklenen yerde bir seçenek karakteri bulunamazsa, getopts var değişkenini “?” olarak ayarlayacaktır; getopts ardından OPTARG'ı unset edecek ve standart hataya çıktı yazacaktır. optstring'in ilk karakteri olarak bir iki nokta üst üste belirtilerek tüm hatalar yoksayılabilir.
Son seçenekten sonra getopts sıfır dışı bir değer döndürecek ve var değişkenini “?” olarak ayarlayacaktır.
Aşağıdaki kod parçası, [a] ve [b] seçeneklerini ve bir argüman gerektiren [c] seçeneğini alabilen bir komut için argümanların nasıl işlenebileceğini gösterir:
while getopts abc: f
do
case $f in
a | b) flag=$f;;
c) carg=$OPTARG;;
?) echo $USAGE; exit 1;;
esac
done
shift expr $OPTIND - 1
Bu kod, aşağıdakilerden herhangi birini eşdeğer olarak kabul edecektir:
cmd -acarg dosya dosya cmd -a -c arg dosya dosya cmd -carg -a dosya dosya cmd -a -carg -- dosya dosya
hash -rv komut ... Kabuk, komutların konumlarını hatırlayan bir hash tablosu tutar. Hiçbir argüman verilmediğinde, hash komutu bu tablonun içeriğini yazdırır. Son cd komutundan beri bakılmamış girdiler yıldız işaretiyle işaretlenir; bu girdilerin geçersiz olması mümkündür.
Argümanlarla birlikte hash komutu, belirtilen komutları hash tablosundan kaldırır (fonksiyon olmadıkları sürece) ve ardından yerlerini tespit eder. -v seçeneği ile hash, komutları buldukça konumlarını yazdırır. -r seçeneği, hash komutunun fonksiyonlar dışındaki hash tablosundaki tüm girdileri silmesine neden olur.
pwd [-LP] pwd yerleşik komutu, mevcut dizinin ne olduğunu her seferinde yeniden hesaplamak yerine hatırlar. Bu onu daha hızlı hale getirir. Ancak mevcut dizin yeniden adlandırılırsa, pwd'nin yerleşik sürümü dizin için eski adı yazdırmaya devam edecektir. -P seçeneği mevcut çalışma dizininin fiziksel değerinin gösterilmesini sağlar, yani tüm sembolik bağlantılar kendi değerlerine çözümlenir. -L seçeneği, önceki -P seçeneklerinin etkisini kapatır.
read [-p prompt] [-r] değişken [...] -p seçeneği belirtilmişse ve standart girdi bir terminal ise prompt (bilgi istemi) yazdırılır. Ardından standart girdiden bir satır okunur. Satırın sonundaki yeni satır karakteri silinir ve satır yukarıdaki sözcük bölme bölümünde açıklandığı gibi bölünür ve parçalar sırayla değişkenlere atanır. En az bir değişken belirtilmelidir. Değişkenlerden daha fazla parça varsa, kalan parçalar (onları ayıran IFS içindeki karakterlerle birlikte) son değişkene atanır. Parçalardan daha fazla değişken varsa, kalan değişkenlere boş dize atanır. read yerleşik komutu, girdide EOF ile karşılaşılmadığı sürece başarıyı belirtecektir, EOF durumunda ise başarısızlık döndürülür.
Varsayılan olarak, -r seçeneği belirtilmediği sürece ters eğik çizgi “\” bir kaçış karakteri görevi görerek takip eden karakterin harfi harfine ele alınmasına neden olur. Bir ters eğik çizgiyi bir yeni satır takip ederse, ters eğik çizgi ve yeni satır silinir.
readonly ad ...
readonly -p Belirtilen adlar salt okunur olarak işaretlenir, böylece daha sonra değiştirilemezler veya unset edilemezler. Kabuk, bir değişkenin değerinin salt okunur olarak işaretlendiği sırada şu şekilde yazarak ayarlanmasına izin verir:
readonly ad=değer
Hiçbir argüman verilmediğinde readonly komutu tüm salt okunur değişkenlerin adlarını listeler. -p seçeneği belirtildiğinde çıktı, etkileşimsiz kullanım için uygun şekilde biçimlendirilir.
printf biçim [argümanlar ...] printf, ilkinden sonraki argümanlarını biçim kontrolü altında biçimlendirir ve yazdırır. Biçim, üç tür nesne içeren bir karakter dizesidir: doğrudan standart çıktıya kopyalanan düz karakterler, dönüştürülüp standart çıktıya kopyalanan karakter kaçış dizileri ve her biri sıradaki argümanın yazdırılmasına neden olan biçim spesifikasyonları.
İlk argümandan sonraki argümanlar, karşılık gelen biçim b, c veya s ise dize olarak ele alınır; aksi takdirde aşağıdaki uzantılarla bir C sabiti olarak değerlendirilir:
• Baştaki artı veya eksi işaretine izin verilir. • Baştaki karakter tek veya çift tırnak ise değer, sonraki karakterin ASCII kodudur.
Biçim dizesi, argümanları karşılamak için gerektiği kadar yeniden kullanılır. Ekstra biçim spesifikasyonları sıfır veya boş dize ile değerlendirilir.
Karakter kaçış dizileri, ANSI X3.159-1989 (“ANSI C89”) içinde tanımlandığı gibi ters eğik çizgi gösterimindedir. Karakterler ve anlamları şöyledir:
\a Bir
\b Bir
\f Bir