GNU/Linux >> Linux Esercitazione >  >> Linux

Perché `while Ifs=Read` viene usato così spesso, invece di `ifs=; Durante la lettura..`?

Sembra che la pratica normale metta l'impostazione di IFS al di fuori del ciclo while per non ripetere l'impostazione per ogni iterazione... È solo uno stile abituale "scimmia guarda, scimmia fai", come è stato per questa scimmia fino a quando non ho letto uomo che legge , o mi sto perdendo qualche trappola sottile (o palesemente ovvia) qui?

Risposta accettata:

La trappola è quella

IFS=; while read..

imposta il IFS per l'intero ambiente shell al di fuori del ciclo, mentre

while IFS= read

lo ridefinisce solo per il read invocazione (tranne nella shell Bourne).
Puoi verificarlo facendo un ciclo come

while IFS= read xxx; ... done

quindi dopo tale ciclo, echo "blabalbla $IFS ooooooo" stampe

blabalbla  ooooooo

mentre dopo

IFS=; read xxx; ... done

il IFS soggiorni ridefinito:ora echo "blabalbla $IFS ooooooo" stampe

blabalbla  ooooooo

Quindi, se usi il secondo modulo, devi ricordarti di reimpostare:IFS=$' tn' .

La seconda parte di questa domanda è stata unita qui, quindi ho rimosso la relativa risposta da qui.


Linux
  1. Perché *non* analizzare `ls` (e cosa fare invece)?

  2. Perché il PC si blocca mentre sto copiando un file su una Pendrive?

  3. Perché Ctrl+m e Ctrl+q non vengono utilizzati nelle scorciatoie Bash?

  4. In `mentre Ifs=Leggi..`, perché Ifs non ha alcun effetto?

  5. Perché questo "durante la lettura" funziona in un terminale, ma non in uno script di shell?

Perché uso exa invece di ls su Linux

Linux vs Mac OS:15 motivi per utilizzare Linux invece di Mac OS

perché l'elenco di fratelli viene utilizzato per ottenere task_struct durante il recupero dei figli di un processo

Perché UASP non viene utilizzato

Perché la mia interfaccia ethernet si chiama enp0s10 invece di eth0?

Perché hexdump tenta di leggere attraverso EOF?