As novas linhas estão na variável LS=$(ls -1)
define a variável LS
para a saída de ls -1
(que produz a mesma saída que ls
, a propósito, exceto quando a saída vai para um terminal), menos novas linhas finais.
O problema é que você está removendo as novas linhas quando imprime o valor. Em um script de shell, $LS
não significa "o valor da variável LS
", significa "tome o valor deLS
, divida-o em palavras de acordo com IFS
e interprete cada palavra como um padrão global”. Para obter o valor de LS
, você precisa escrever "$LS"
, ou mais geralmente, colocar $LS
entre aspas duplas.
echo "$LS"
imprime o valor de LS
, exceto em algumas conchas que interpretam caracteres de barra invertida e, exceto por alguns valores que começam com -
.
printf "$LS"
imprime o valor de LS
desde que não contenha nenhum caractere de porcentagem ou barra invertida e (com a maioria das implementações) não começa -
.
Para imprimir o valor de LS
exatamente , use printf %s "$LS"
. Se você deseja uma nova linha no final, use printf '%s\n' "$LS"
.
Observe que $(ls)
geralmente não é a lista de arquivos no diretório atual. Isso funciona apenas quando você tem nomes de arquivos domados o suficiente. Para obter a lista de nomes de arquivos (exceto arquivos de ponto), você precisa usar um curinga: *
. O resultado é uma lista de cadeias, não uma cadeia, portanto, você não pode atribuí-la a uma variável de cadeia; você pode usar uma variável de matriz files=(*)
em shells que os suportam (ksh93, bash, zsh).
Para obter mais informações, consulte Por que meu script de shell é bloqueado em espaço em branco ou em outros caracteres especiais?
printf "%s\n" $LS
faria.