Las nuevas líneas están en la variable. LS=$(ls -1)
establece la variable LS
en la salida de ls -1
(que produce la misma salida que ls
, por cierto, excepto cuando la salida va a una terminal), menos las nuevas líneas finales.
El problema es que está eliminando las nuevas líneas cuando imprime el valor. En un script de shell, $LS
no significa "el valor de la variable LS
", significa "tomar el valor de LS
, dividirlo en palabras según IFS
e interpretar cada palabra como un patrón global". Para obtener el valor de LS
, necesita escribir "$LS"
, o más generalmente poner $LS
entre comillas dobles.
echo "$LS"
imprime el valor de LS
, excepto en algunos shells que interpretan caracteres de barra invertida, y a excepción de algunos valores que comienzan con -
.
printf "$LS"
imprime el valor LS
siempre que no contenga ningún carácter de porcentaje o barra invertida y (con la mayoría de las implementaciones) no comience con -
.
Para imprimir el valor de LS
exactamente, use printf %s "$LS"
. Si quieres una nueva línea al final, úsala printf '%s\n' "$LS"
.
Tenga en cuenta que $(ls)
no es, en general, la lista de archivos en el directorio actual. Esto solo funciona cuando tienes nombres de archivo suficientemente mansos. Para obtener la lista de nombres de archivo (excepto archivos punto), es necesario utilizar un comodín: *
. El resultado es una lista de cadenas, no una cadena, por lo que no puede asignarla a una variable de cadena; puede usar una variable de matriz files=(*)
en shells que las admitan (ksh93, bash, zsh).
Para obtener más información, consulte ¿Por qué mi script de shell se ahoga en espacios en blanco u otros caracteres especiales?
printf "%s\n" $LS
lo harían.