Qual é a diferença de obter a saída do comando usando 'comando' e $ (comando) no Shell? [duplicado]

0
    

Esta pergunta já tem uma resposta aqui:

    

Qual é a diferença em coletar uma saída de comando no script Shell usando 'command' e $ (command)? Por exemplo:

# IP1=$(ifconfig eth0 | grep -e "inet " | cut -d: -f2 | awk '{print $1}')
# IP2='ifconfig eth0 | grep -e "inet " | cut -d: -f2 | awk '{print $1}''
# echo $IP1 $IP2
> 192.241.145.112 192.241.145.112
    
por Davi Garcia 07.12.2013 / 16:36

2 respostas

4

A principal diferença é que os backticks não se encaixam: você não pode inserir um comando backticked dentro de outro. (Na verdade, você pode, mas você precisa escapar deles com uma barra invertida, e fica mais complicado a partir daí.) Essa foi, eu acredito, a principal motivação para criar a nova sintaxe $(command) .

A sintaxe $(command) também fornece um atalho conveniente para interpolar o conteúdo de um arquivo: $(<filename) é equivalente a $(cat filename) .

Outra diferença: $() não é suportado por alguns shells comuns.

    
por 07.12.2013 / 17:04
1

A sintaxe $( ) de substituição de comandos foi introduzida há cerca de 25 anos por ksh para superar as limitações do "comando" original, especialmente a forma complexa de obter o aninhamento de comandos.

Ele foi incluído pelo padrão de shell POSIX e por outros shells visando a conformidade padrão como bash .

A sintaxe antiga era suportada em ksh88 apenas para fornecer compatibilidade com scripts herdados. Havia uma esperança de que isso se tornasse obsoleto, mas, infelizmente, a "nova" sintaxe ainda não é publicitada ou ensinada o suficiente e a sintaxe legada ainda é muito usada e popular.

    
por 07.12.2013 / 18:19