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