Komut ikamesi, bir komutun çıktısının komut adının yerine ikame edilmesine izin verir. Komut ikamesi, komut aşağıdaki gibi kapatıldığında gerçekleşir:
$(command)
veya (geriye dönük sürüm):
`command`
Kabuk,
bir alt kabuk ortamında komut yürüterek (bkz. Kabuk Yürütme Ortamı ) ve komut ikamesini ( komut metni artı "$ ()" veya geri tırnaklar ekleyerek) komutun standart çıktısı ile değiştirerek komut ikamesini genişletir. <newline>
ikamenin sonunda bir veya daha fazla karakterin dizileri . <newline>
Çıktı bitmeden gömülü karakterler kaldırılmamalıdır; bununla birlikte, bunlar IFS değerine ve yürürlükte olan alıntıya bağlı olarak alan ayırıcılar olarak ele alınabilir ve alan ayrılması sırasında elimine edilebilir. Çıktı herhangi bir boş bayt içeriyorsa, davranış belirtilmez.
Geri verilen komut yerine koyma tarzı içinde, <backslash>
' $
', ' `
' veya
izleyen durumlar dışında gerçek anlamını koruyacaktır <backslash>
. Eşleşen backquote araştırması, alıntılanmamış ilk kaçan backquote tarafından sağlanacaktır; bu arama sırasında, bir kabuk yorumu, burada bir belge, $ ( komut ) formunun katıştırılmış komut ikamesi veya tırnak içine alınmış bir dize içinde kaçan bir geri sorgula karşılaşılırsa tanımsız sonuçlar oluşur. " `...`
" Dizisi içinde başlayan, ancak bitmeyen tek tırnaklı veya çift tırnaklı bir dize , tanımlanmamış sonuçlar üretir.
$ ( Komut ) formuyla, eşleşen kapanış parantezine açık parantezin ardından gelen tüm karakterler
komutu oluşturur . Herhangi geçerli kabuk komut dosyası için kullanılabilir komutu yalnızca belirtilmemiş sonuçlar üretir yönlendirmeler oluşan bir senaryo dışında.
Komut ikamesinin sonuçları, daha fazla tilde genişletme, parametre genişletme, komut ikame veya aritmetik genişletme için işlenmeyecektir. Çift tırnak içinde bir komut ikamesi meydana gelirse, ikame sonuçları üzerinde alan bölme ve yol adı genişletme yapılmayacaktır.
Komut ikamesi yuvalanabilir. Geri sıralanan sürümde iç içe yerleştirmeyi belirtmek için, uygulama iç arka tırnaklardan <backslash>
karakterlerle önce gelir ; Örneğin:
\`command\`
Shell komut dilinin sözdizimi, "$((
", alt kabukla başlayan bir aritmetik genişletme veya komut ikamesi ekleyebilir. Aritmetik genişletme önceliğe sahiptir; yani, kabuk ilk olarak genişletmeyi bir aritmetik genişletme olarak ayrışıp ayrıştıramayacağını belirler ve yalnızca genişletmeyi bir komut olarak ayrıştırır genişletmeyi aritmetik bir genişletme olarak ayrıştıramadığını belirlerse, bu belirleme yapılırken kabuğun iç içe açılımları değerlendirmesine gerek yoktur.Genişlemeyi bir aritmetik genişletme olarak ayrıştıramadığını zaten belirlemeden girişin sonuna rastlarsa, kabuk, genişletmeyi tamamlanmamış bir aritmetik genişletme olarak ele alır ve bir sözdizimi hatası bildirir. Uygun bir uygulama, "$(
" ve "(
'alt kabuk ile başlayan bir komut yerine iki jeton (yani boşlukla ayırın). Örneğin, tek bir alt kabuk içeren bir komut ikamesi şöyle yazılabilir:
$( (command) )
$()
POSIX ve ksh, bash, ash, dash, zsh, busybox gibi tüm modern Bourne kabukları tarafından destekleniyor. (Çok modern olmayan bir tanesi Solaris'tir/bin/sh
, ancak Solaris'te moderni kullandığınızdan emin olursunuz/usr/xpg4/bin/sh
).