Perché come dice il manuale di bash riguardo alla sostituzione dei comandi:
Bash esegue l'espansione eseguendo il comando e sostituendo la sostituzione del comando con l'output standard del comando, eliminando eventuali newline finali.
Quindi, aggiungendo \b
impedisci la rimozione di \n
.
Un modo più pulito per farlo potrebbe essere usare $''
citando, in questo modo:
IFS=$'\n'
Mi sono appena ricordato il modo più semplice. Testato con bash su debian wheezy.
IFS="
"
non sto scherzando :)
È un hack a causa dell'uso di echo
e sostituzione dei comandi.
prompt> x=$(echo -en "\n")
prompt> echo ${#x}
0
prompt> x=$(echo -en "\n\b")
prompt> echo ${#x}
2
Il $()
elimina le nuove righe finali e \b
impedisce \n
dall'essere una nuova riga finale pur essendo altamente improbabile che appaia in qualsiasi testo. IFS=$'\n'
è il modo migliore per impostare IFS in modo che si divida sui newline.