Porque como dice el manual de bash con respecto a la sustitución de comandos:
Bash realiza la expansión ejecutando el comando y reemplazando la sustitución del comando con la salida estándar del comando, eliminando cualquier salto de línea final.
Entonces, agregando \b
impides la eliminación de \n
.
Una forma más limpia de hacer esto podría ser usar $''
citando, así:
IFS=$'\n'
Acabo de recordar la forma más fácil. Probado con bash en Debian Wheezy.
IFS="
"
no es broma :)
Es un hack por el uso de echo
y sustitución de comandos.
prompt> x=$(echo -en "\n")
prompt> echo ${#x}
0
prompt> x=$(echo -en "\n\b")
prompt> echo ${#x}
2
Los $()
elimina las líneas nuevas finales y \b
previene \n
de ser una nueva línea final mientras que es muy poco probable que aparezca en cualquier texto. IFS=$'\n'
es la mejor manera de configurar IFS para que se divida en saltos de línea.