GNU/Linux >> Linux Esercitazione >  >> Linux

Capire se?

I seguenti pochi thread su questo sito e StackOverflow sono stati utili per capire come IFS funziona:

  • Cos'è l'IFS nel contesto di ciclo continuo?
  • Come scorrere le righe di un file
  • Bash, leggi riga per riga da file, con IFS

Ma ho ancora alcune brevi domande. Ho deciso di chiedere loro nello stesso post poiché penso che possa aiutare i futuri lettori migliori:

1° trimestre. IFS è tipicamente discusso nel contesto della "divisione del campo". È divisione del campo lo stesso della divisione delle parole ?

Q2: La specifica POSIX dice:

Se il valore di IFS è nullo, non verrà eseguita alcuna suddivisione del campo.

Sta impostando IFS= come impostare IFS a nulla? È questo ciò che si intende impostandolo su una empty string anche tu?

T3: Nella specifica POSIX, ho letto quanto segue:

Se IFS non è impostato, la shell si comporterà come se il valore di IFS fosse
<space>, <tab> and <newline>

Supponi di voler ripristinare il valore predefinito di IFS . Come lo faccio? (più nello specifico, come faccio a fare riferimento a <tab> e <newline> ?)

Q4: Infine, come sarebbe questo codice:

while IFS= read -r line
do    
    echo $line
done < /path_to_text_file

comportarsi se cambiamo la prima riga in

while read -r line # Use the default IFS value

oppure a:

while IFS=' ' read -r line

Risposta accettata:

  1. Sì, sono la stessa cosa.
  2. Sì.
  3. In bash e in shell simili, potresti fare qualcosa come IFS=$' tn' . Altrimenti, puoi inserire i codici di controllo letterali usando [space] CTRL+V [tab] CTRL+V [enter] . Se hai intenzione di farlo, tuttavia, è meglio utilizzare un'altra variabile per memorizzare temporaneamente il vecchio IFS valore, quindi ripristinarlo in seguito (o sovrascriverlo temporaneamente per un comando utilizzando il comando var=foo command sintassi).
    • Il primo frammento di codice metterà l'intera riga letta, testualmente, in $line , poiché non ci sono separatori di campo per i quali eseguire la divisione delle parole. Tieni presente, tuttavia, che poiché molte shell utilizzano cstrings per memorizzare le stringhe, la prima istanza di un NUL può comunque far sembrare che venga terminata prematuramente.
    • Il secondo frammento di codice potrebbe non inserire una copia esatta dell'input in $line . Ad esempio, se sono presenti più separatori di campo consecutivi, verranno trasformati in un'unica istanza del primo elemento. Questo è spesso riconosciuto come perdita di spazio bianco circostante.
    • Il terzo frammento di codice funzionerà come il secondo, tranne per il fatto che verrà diviso solo su uno spazio (non il solito spazio, tabulazione o nuova riga).
Correlati:comprensione di "IFS=read -r line"?
Linux
  1. Comprensione di systemd all'avvio su Linux

  2. Capire "ifs=Leggi -r Line"?

  3. I "se"?

  4. Capire Linux Desktop?

  5. Comprensione dell'utilità logrotate

Ansible vs Kubernetes:capire le differenze

Comprendere i permessi dei file Linux

Bash ha letto Comando

Come leggere un file riga per riga in Bash

Leggi la posta dell'utente

Comprensione dei processi su Linux