GNU/Linux >> Znalost Linux >  >> Linux

Proč se `při Ifs=Read` tak často používá místo `ifs=; Při čtení..`?

Zdá se, že normální praxe by umístila nastavení IFS mimo smyčku while, aby se neopakovalo nastavování pro každou iteraci... Je to jen obvyklý styl „opice vidí, opice dělej“, jak tomu bylo u této opice, dokud jsem nečetl člověk , nebo mi tu chybí nějaká jemná (nebo zcela zjevná) past?

Přijatá odpověď:

Past je v tom

IFS=; while read..

nastaví IFS pro celé prostředí shellu mimo smyčku, zatímco

while IFS= read

předefinuje jej pouze pro read vyvolání (kromě Bourne shellu).
Můžete zkontrolovat, že uděláte smyčku jako

while IFS= read xxx; ... done

pak po takové smyčce echo "blabalbla $IFS ooooooo" tiskne

blabalbla  ooooooo

zatímco po

IFS=; read xxx; ... done

IFS zůstane předefinováno:nyní echo "blabalbla $IFS ooooooo" tiskne

blabalbla  ooooooo

Takže pokud použijete druhý formulář, musíte si zapamatovat reset:IFS=$' tn' .

Druhá část této otázky byla sloučena sem, takže jsem odtud odstranil související odpověď.


Linux
  1. Proč *ne* analyzovat `ls` (a co dělat místo toho)?

  2. Df říká, že mám o 20 g více místa na disku než Du. Proč??

  3. Proč se v klávesových zkratkách Bash nepoužívají Ctrl+m a Ctrl+q?

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

  2. Proč se stále používá číslo disku/diskového oddílu?

  3. Proč je mmap() rychlejší než sekvenční IO?

  1. Proč se v Linuxu používá select

  2. proč se v programování jádra používá u8 u16 u32 u64 místo unsigned int

  3. Proč máme v LINUXu 3 typy X-výběrů?