Por que o operador Grave altera o formato de saída do comando? [duplicado]

0
    

Esta pergunta já tem uma resposta aqui:

    

Olá, eu quero perguntar por que quando eu escrevo

  ls -l

há nova linha depois de cada linha, mas quando eu a atribuo a uma variável

myVariable='ls -l'

e que ecoa essa variável

echo $myVariable

eu obtenho tudo em concatenado em uma linha ... Obrigado

    
por James 25.04.2016 / 23:04

1 resposta

2

Existem dois problemas independentes decorrentes desta questão.

  1. O comando ls é construído para agir de maneira diferente quando grava no terminal e quando grava em um arquivo ou pipe. Você pode ver isso comparando esses dois comandos

    ls
    ls | cat
    

    No primeiro exemplo, ls pode ver que está gravando no terminal e, portanto, formata sua saída para um leitor humano. No segundo exemplo, ls pode ver que está gravando em um arquivo ou pipe e, portanto, produz uma entrada por linha. Você pode substituir as duas configurações pelos argumentos -1 ou -C .

  2. Quando você atribui ls -l a uma variável, as novas linhas são mantidas. No entanto, no seu caso, você não está citando a variável quando a usa, de modo que cada execução de "espaço em branco" (tudo o que não imprime caracteres visíveis) é convertido em espaço único. Compare estes resultados

    var=$(ls -l); echo $var
    var=$(ls -l); echo "$var"
    

Consulte $ VAR vs $ {VAR } e para citar ou não citar para mais detalhes. Observe também que usei $(...) em preferência a '...' . A resposta duplicada sugerida, compreensão do backtick explica por quê.

    
por 26.04.2016 / 00:31

Tags