Como os parênteses são interpretados na linha de comando?

36

Durante a leitura de como configurar grub , me deparei com um artigo afirmando que preciso usar uma das duas sintaxes a seguir,

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

ou

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

porque, na linha de comando, os parênteses são interpretados de maneira especial. O que há de especial nos parênteses? Como eles são interpretados?

    
por Steve Brown 05.12.2011 / 01:05

2 respostas

39

Os parênteses denotam um subshell no bash. Para citar a página man bash :

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

em que list é apenas uma sequência normal de comandos.

Isso é realmente bastante portátil e não é específico de apenas bash . A POSIX Shell Command Language especificação tem a seguinte descrição para o (compound-list) sintaxe:

Execute compound-list in a subshell environment; see Shell Execution Environment. Variable assignments and built-in commands that affect the environment shall not remain in effect after the list finishes.

    
por 05.12.2011 / 01:09
9

Uma lista de comandos incorporada entre parênteses é executada como um subnível.

Variáveis em um subshell não são visíveis fora do bloco de código no subshell. Eles não estão acessíveis para o processo pai, para o shell que lançou o subshell. Estas são, na verdade, variáveis locais.

Veja Linuxtopia - Capítulo 20. Subshells

    
por 05.12.2011 / 02:04