Come vengono interpretate le parentesi nella riga di comando?


45

Durante la lettura di come impostare grub, mi sono imbattuto in un articolo in cui si afferma che è necessario utilizzare una delle due seguenti sintassi,

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

o

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

perché, dalla riga di comando, le parentesi sono interpretate in modo speciale. Cosa c'è di speciale tra parentesi? Come vengono interpretati?

Risposte:


46

Le parentesi indicano una subshell in bash. Per citare la man bashpagina:

(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.

dove a listè solo una normale sequenza di comandi.

Questo è in realtà abbastanza portatile e non specifico solo bashperò. Le specifiche del linguaggio dei comandi della shell POSIX hanno la seguente descrizione per la (compound-list)sintassi:

Eseguire l' elenco composto in un ambiente subshell; consultare l' ambiente di esecuzione della shell . Le assegnazioni di variabili e i comandi integrati che influiscono sull'ambiente non devono rimanere in vigore al termine dell'elenco.


In bash e altre conchiglie ...?
Jasonwryan,

3
bash è quello di cui stavo chiedendo ...
Steve Brown,

5
Qual è la differenza tra $()e ()?
CMCDragonkai,

5
@CMCDragonkai È la $()sostituzione del comando, ()è una subshell. Entrambi eseguono comandi, la differenza è ciò che accade all'output. I nomi sono molto più facili da cercare rispetto ai simboli. Vedi anche unix.stackexchange.com/q/213530/9537
jw013

12

Un elenco di comandi incorporato tra parentesi viene eseguito come subshell.

Le variabili in una subshell non sono visibili al di fuori del blocco di codice nella subshell. Non sono accessibili al processo genitore, alla shell che ha lanciato la subshell. Queste sono, in effetti, variabili locali.

Vedi Linuxtopia - Capitolo 20. Sottotitoli

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.