echo result from subshell em zsh

5

No zsh, os dois comandos a seguir resultam de maneira diferente:

a=$(</etc/hosts) && echo $a
echo $(</etc/hosts)

O primeiro imprime o conteúdo linha por linha, enquanto o segundo imprime o conteúdo como um todo em uma única linha.

Eu acho que é porque o subshell retorna o resultado linha por linha para o processo principal echo , mas eu não posso confirmar isso.

Alguém pode me ajudar a esclarecer isso?

    
por carl 02.05.2015 / 19:16

1 resposta

4

Em zsh, as variáveis não nomeadas não são divididas e globadas , enquanto substituição de comando sem aspas será dividida em palavras usando valores em IFS .

No seu caso, o primeiro comando salvou o conteúdo do arquivo /etc/hosts na variável a , echo $a imprime o valor da variável a sem dividir e glob, você obtém o conteúdo de /etc/hosts ( split e glob não são executados no RHS da atribuição de variável ).

echo $(</etc/hosts) usou a substituição de comando sem aspas, o resultado será dividido em palavras, para que você obtenha o conteúdo de /etc/hosts como todas as palavras delimitadas por espaço.

    
por 02.05.2015 / 19:32