Jak interpretowane są nawiasy w wierszu poleceń?


45

Czytając o tym, jak skonfigurować grub, natknąłem się na artykuł, w którym twierdziłem, że muszę użyć jednej z następujących dwóch składni:

echo \(hd0,0\) >> /boot/grub/grub.conf

lub

echo '(hd0,0)' >> /boot/grub/grub.conf

ponieważ w wierszu poleceń nawiasy są interpretowane w specjalny sposób. Co jest specjalnego w nawiasach? Jak oni są interpretowani?

Odpowiedzi:


46

Nawiasy oznaczają podpowłokę w bash. Aby zacytować man bashstronę:

(list)    list  is  executed  in  a  subshell  environment (see COMMAND
          EXECUTION ENVIRONMENT below).  Variable assignments and builtin 
          commands that affect the shell's environment do not remain in 
          effect after the command completes.  The return status is the
          exit status of list.

gdzie a listjest po prostu normalną sekwencją poleceń.

Jest to w rzeczywistości dość przenośne i nie jest specyficzne tylko dla bash. Specyfikacja języka poleceń powłoki POSIX zawiera następujący opis (compound-list)składni:

Wykonaj listę złożoną w środowisku podpowłoki; zobacz Środowisko wykonywania powłoki . Zmienne przypisania i wbudowane polecenia, które wpływają na środowisko, nie będą obowiązywać po zakończeniu listy.


W bash i innych powłokach ...?
jasonwryan

3
zapytałem o bash ...
Steve Brown

5
Jaka jest różnica między $()i ()?
CMCDragonkai,

5
@CMCDragonkai Jest $()to podstawienie polecenia, ()jest podpowłoka. Oba uruchamiają polecenia, różnica polega na tym, co dzieje się z danymi wyjściowymi. Nazwy są znacznie łatwiejsze do wyszukiwania niż symbole. Zobacz także unix.stackexchange.com/q/213530/9537
jw013,

12

Lista poleceń osadzona między nawiasami działa jako podpowłoka.

Zmienne w podpowłoce nie są widoczne poza blokiem kodu w podpowłoce. Nie są one dostępne dla procesu nadrzędnego ani powłoki, która uruchomiła podpowłokę. Są to w rzeczywistości zmienne lokalne.

Zobacz Linuxtopia - Rozdział 20. Podkładki

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.