Podstawianie poleceń umożliwia zastąpienie danych wyjściowych polecenia w miejsce samej nazwy polecenia. Podstawienie polecenia następuje, gdy polecenie jest ujęte w następujący sposób:
$(command)
lub (wersja z cytatem wstecznym):
`command`
Powłoka powinna rozszerzyć podstawianie poleceń, wykonując polecenie
w środowisku podpowłoki (patrz Środowisko wykonawcze powłoki ) i zastępując podstawienie polecenia (tekst polecenia plus otaczający znak „$ ()” lub odwrotne cudzysłowy) standardowym wyjściem polecenia, usuwając sekwencje jednego lub więcej <newline>
znaków na końcu podstawienia. Osadzone <newline>
znaki przed końcem wyjścia nie będą usuwane; jednakże mogą być traktowane jako ograniczniki pól i eliminowane podczas dzielenia pól, w zależności od wartości IFS i obowiązującego kwotowania. Jeśli dane wyjściowe zawierają jakiekolwiek bajty o wartości null, zachowanie jest nieokreślone.
W stylu zastępowania poleceń w cudzysłowie, <backslash>
zachowuje swoje dosłowne znaczenie, z wyjątkiem sytuacji, gdy następuje po nim: „ $
”, „ `
”, lub
<backslash>
. Poszukiwanie pasującego odwrotnego cudzysłowu spełnia pierwszy niezacytowany odwrotny cudzysłów; podczas tego wyszukiwania, jeśli w komentarzu powłoki zostanie napotkany odwrotny cudzysłów bez znaku ucieczki, dokument znajdujący się w miejscu, osadzone polecenie podstawienia w postaci $ ( polecenie ) lub ciąg cytowany w cudzysłowie, pojawią się niezdefiniowane wyniki. Ciąg w apostrofach lub podwójnych cudzysłowach, który zaczyna się, ale nie kończy w `...`
sekwencji „ ”, daje niezdefiniowane wyniki.
W postaci $ ( polecenie ) wszystkie znaki następujące po nawiasie otwierającym do pasującego nawiasu zamykającego stanowią
polecenie . Do polecenia można użyć dowolnego poprawnego skryptu powłoki , z wyjątkiem skryptu składającego się wyłącznie z przekierowań, który daje nieokreślone wyniki.
Wyniki podstawiania poleceń nie będą przetwarzane w celu dalszego interpretowania tyldy, podstawiania parametrów, podstawiania poleceń ani interpretacji wyrażeń arytmetycznych. Jeżeli podstawianie komend następuje w cudzysłowach, dzielenie pól i rozwijanie nazw plików nie powinny być wykonywane na wynikach podstawiania.
Podstawianie poleceń można zagnieżdżać. Aby określić zagnieżdżenie w wersji z cudzysłowami wstecznymi, aplikacja powinna poprzedzać wewnętrzne cudzysłowy <backslash>
znakami; na przykład:
\`command\`
Składnia języka poleceń powłoki jest niejednoznaczna dla rozszerzeń zaczynających się od „$((
", który może wprowadzić interpretację arytmetyczną lub podstawienie polecenia rozpoczynające się od podpowłoki. Interpretacja arytmetyczna ma pierwszeństwo; to znaczy powłoka powinna najpierw określić, czy może przeanalizować interpretację jako interpretację arytmetyczną i przeanalizować ją tylko jako polecenie podstawienie, jeśli stwierdzi, że nie może przeanalizować interpretacji jako interpretacji arytmetycznej. Powłoka nie musi oceniać zagnieżdżonych ekspansji podczas wykonywania tego określenia. Jeśli napotka koniec danych wejściowych bez wcześniejszego ustalenia, że nie może przeanalizować interpretacji jako interpretacji arytmetycznej, powłoka powinna traktować rozwinięcie jako niepełne rozwinięcie arytmetyczne i zgłosić błąd składni. Zgodna aplikacja powinna zapewnić, że oddziela " $(
" i "(
'na dwa tokeny (to znaczy oddziel je spacjami) w podstawieniu polecenia, które zaczyna się od podpowłoki. Na przykład podstawienie polecenia zawierające pojedynczą podpowłokę można zapisać jako:
$( (command) )
$()
jest POSIX i jest obsługiwany przez wszystkie współczesne powłoki Bourne'a, np. ksh, bash, ash, dash, zsh, busybox, możesz to nazwać. (Nie tak nowoczesny jest Solaris/bin/sh
, ale w Solarisie powinieneś/usr/xpg4/bin/sh
zamiast tego użyć nowoczesnego ).