zsh remove o espaço em branco inicial

1

Considere os dois comandos a seguir e seus resultados:

14:57 : echo $(echo "  ABC")
ABC

14:57 : echo "  ABC"
  ABC

Versão do zsh: zsh 5.0.5 (x86_64-apple-darwin14.0)

Por que o primeiro remove os principais espaços em branco? Não consigo encontrar uma explicação ou justificativa no documento.

    
por Alexandre Halm 09.11.2014 / 12:01

2 respostas

3

Porque echo ABC e echo ABC fornecem a mesma saída: ABC e o primeiro comando echo $(echo " ABC") == > echo ABC == > %código%. Vários espaços são apenas removidos pelo shell, então ABC nem sabe quantos deles estavam presentes na linha de comando.

Você pode preservar espaços citando toda a expressão da seguinte maneira:

$ echo "$(echo "  ABC")"
    ABC

ou

$ echo "$(echo '  ABC')"
    ABC
    
por 09.11.2014 / 12:08
5

O resultado de uma substituição de comandos é dividido em palavras usando caracteres de IFS como separadores, a menos que a substituição do comando esteja entre aspas duplas. Assim, " ABC" é dividido em uma lista de palavras, que contém um elemento "ABC" . Use echo "$(echo " ABC")" para usar o resultado do comando susbtitution como uma string.

Ao contrário dos shells normais do tipo Bourne / POSIX, o zsh não trata as palavras resultantes da substituição de comandos como padrões globais: echo $(echo "*") imprime * , não uma lista de arquivos (a menos que a opção glob_subst esteja definida) . Além disso, ao contrário dos shells normais do tipo Bourne / POSIX, a divisão é executada apenas em substituições de comandos sem aspas, não em substituições de variáveis sem aspas, exceto que as palavras vazias resultantes de uma substituição de variável sem aspas são removidas.

    
por 09.11.2014 / 12:29

Tags