O que é $ () em um comando?

8

O que é $() nos comandos do shell do Linux?

Por exemplo:

chmod 777 $(pwd)
    
por Persian 30.07.2014 / 14:29

3 respostas

12

É muito parecido com os backticks ''.

É chamado de substituição de comandos ( especificação posix ) e invoca um subshell. O comando nas chaves de $() ou entre os backticks ('') é executado em uma subshell e a saída é então colocada no comando original.

Ao contrário dos backticks, o formulário $(...) pode ser aninhado. Então você pode usar a substituição de comandos dentro de outra substituição.

Existem diferenças de aso em caracteres de escape dentro da substituição. Eu prefiro o formulário $(...) .

    
por 30.07.2014 / 14:47
4

Em shells POSIX ou POSIX ( ksh , bash , ash , zsh , yash ...), é como '' : o comando dentro de $() é executado e substituído por sua saída padrão. A divisão de palavras e a geração de nome de arquivo são feitas, a menos que $() esteja entre aspas duplas. Assim

chmod 777 $(pwd)

deve ser substituído por:

chmod 777 "$(pwd)"

para evitar a divisão de palavras e geração de nome de arquivo no caminho atual do diretório de trabalho.

Ou melhor ainda (exceto em alguns shells, como zsh, caso o diretório tenha sido renomeado):

chmod 777 "$PWD"

Como $PWD é uma variável especial que contém o caminho para o diretório de trabalho atual em shells POSIX.

Ou melhor ainda:

chmod 777 .

Como a entrada . no diretório atual é um link físico para o próprio diretório.

    
por 30.07.2014 / 14:36
2

Este $() é usado para executar um comando principalmente dentro de algum outro comando.

chmod 777 $(pwd)
O comando

pwd fornece o diretório de trabalho atual. Então, quando a coisa toda for executada, a saída do pwd substituirá sua posição e servirá como argumento para chmod , e o resultado é que todo o seu diretório de trabalho atual obtenha a permissão 777 , que eu acho que nunca deveria ser usada na produção meio ambiente;).

    
por 30.07.2014 / 14:52