Le nuove righe sono nella variabile. LS=$(ls -1)
imposta la variabile LS
sull'output di ls -1
(che produce lo stesso output di ls
, a proposito, tranne quando l'output arriva a un terminale), meno le nuove righe finali.
Il problema è che stai rimuovendo le nuove righe quando stampi il valore. In uno script shell, $LS
non significa "il valore della variabile LS
", significa "prendere il valore di LS
, dividerlo in parole secondo IFS
e interpretare ogni parola come un modello glob". Per ottenere il valore di LS
, è necessario scrivere "$LS"
, o più in generale, $LS
tra virgolette doppie.
echo "$LS"
stampa il valore di LS
, tranne in alcune shell che interpretano i caratteri di barra rovesciata e ad eccezione di alcuni valori che iniziano con -
.
printf "$LS"
stampa il valore LS
purché non contenga alcun carattere percentuale o barra rovesciata e (con la maggior parte delle implementazioni) non inizi con -
.
Per stampare LS
esattamente il valore , utilizzare printf %s "$LS"
. Se vuoi una nuova riga alla fine, usa printf '%s\n' "$LS"
.
Si noti che $(ls)
non è, in generale, l'elenco dei file nella directory corrente. Funziona solo quando hai abbastanza nomi di file da domare. Per ottenere l'elenco dei nomi dei file (eccetto i file dot), è necessario utilizzare un carattere jolly: *
. Il risultato è un elenco di stringhe, non una stringa, quindi non è possibile assegnarlo a una variabile stringa; puoi usare una variabile array files=(*)
nelle shell che le supportano (ksh93, bash, zsh).
Per ulteriori informazioni, vedi Perché il mio script shell si soffoca su spazi bianchi o altri caratteri speciali?
printf "%s\n" $LS
lo farebbero.