Protože jak říká bash manuál ohledně substituce příkazů:
Bash provede rozšíření provedením příkazu a nahrazením příkazu standardním výstupem příkazu, přičemž všechny koncové nové řádky budou odstraněny.
Takže přidáním \b zabráníte odstranění \n .
Čistším způsobem, jak toho dosáhnout, by mohlo být použití $'' cituji takto:
IFS=$'\n'
Právě jsem si vzpomněl na nejjednodušší způsob. Testováno pomocí bash na debian wheezy.
IFS="
"
nedělej si srandu :)
Je to hack kvůli použití echo a substituce příkazů.
prompt> x=$(echo -en "\n")
prompt> echo ${#x}
0
prompt> x=$(echo -en "\n\b")
prompt> echo ${#x}
2
$() pruhy na konci nových řádků a \b zabraňuje \n z toho, že je na konci nového řádku, a přitom je vysoce nepravděpodobné, že se objeví v nějakém textu. IFS=$'\n' je lepší způsob, jak nastavit IFS na rozdělení na nové řádky.
Jak vygenerovat seznam jedinečných řádků v textovém souboru pomocí skriptu Linux shell?
Příkaz Linux pro kontrolu, zda je spuštěn skript shellu nebo ne