GNU/Linux >> Znalost Linux >  >> Linux

Když nastavujete IFS na rozdělení na nové řádky, proč je nutné zahrnout backspace?

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.


Linux
  1. Kdy je nutné dvojité uvozování?

  2. Proč je Printf lepší než Echo?

  3. Proč je nastavení proměnné před příkazem v Bash legální?

  1. Proč nemají Ifs žádný účinek v `když Ifs=číst...`?

  2. Jak zachovat konce řádků při ukládání výstupu příkazu do proměnné?

  3. Proč nebyl příkaz sudo:bundle nalezen?

  1. Proč nefunguje automatické dokončování při zadávání názvu příkazu za „zdroj“?

  2. Změnit písmo v příkazu Echo?

  3. Linuxový příkaz echo