As novas linhas estão na variável LS=$(ls -1)define a variável LSpara 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, $LSnão significa "o valor da variável LS", significa "tome o valor deLS , divida-o em palavras de acordo com IFSe interprete cada palavra como um padrão global”. Para obter o valor de LS, você precisa escrever "$LS", ou mais geralmente, colocar $LSentre 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" $LSfaria.