Cite a variável:
echo "$z"
Sem aspas, cada palavra em $z
se torna um argumento separado para echo
, com aspas a variável inteira é um único argumento - newlines e all.
Se eu fizer z='ls'
e, em seguida, echo $z
, ele irá imprimir o diretório listado, mas sem novas linhas ou formatação. Eu suponho que a falta de formatação colorida é impossível de contornar, mas seria possível obtê-lo com as novas linhas lá?
Você pode obter cores dizendo
z=$(ls --color)
ou, para ser explícito,
x=$(ls --color=always)
$(command)
é (essencialmente) equivalente a 'command'
;
consulte Qual é o benefício de usar $ () em vez de backticks em scripts de shell?
O padrão de ls
é --color=auto
, o que significa usar cores somente ao gravar em um terminal
(isto é, quando a saída padrão é um terminal).
$(command)
e 'command'
executam o command
com saída para um canal; --color=always
diz a ls
para usar cores, mesmo neste caso.
Você pode testar isso facilmente comparando
ls | cat
com
ls --color | cat