GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi `while Ifs=Read` est-il utilisé si souvent, au lieu de `ifs=; Pendant la lecture..` ?

Il semble que la pratique normale placerait le réglage d'IFS en dehors de la boucle while afin de ne pas le répéter à chaque itération… Est-ce juste un style habituel « singe voir, singe faire », comme ce fut le cas pour ce singe jusqu'à ce que je lise l'homme a lu , ou ai-je raté un piège subtil (ou manifestement évident) ?

Réponse acceptée :

Le piège est que

IFS=; while read..

définit l'IFS pour tout l'environnement shell en dehors de la boucle, alors que

while IFS= read

le redéfinit uniquement pour la read appel (sauf dans le shell Bourne).
Vous pouvez vérifier que faire une boucle comme

while IFS= read xxx; ... done

puis après une telle boucle, echo "blabalbla $IFS ooooooo" impressions

blabalbla  ooooooo

alors qu'après

IFS=; read xxx; ... done

l'IFS séjours redéfini :maintenant echo "blabalbla $IFS ooooooo" impressions

blabalbla  ooooooo

Donc si vous utilisez le second formulaire, il faut penser à réinitialiser :IFS=$' tn' .

La deuxième partie de cette question a été fusionnée ici, j'ai donc supprimé la réponse connexe d'ici.


Linux
  1. Pourquoi *pas* analyser `ls` (et que faire à la place) ?

  2. Pourquoi le PC se fige-t-il pendant que je copie un fichier sur une clé USB ?

  3. Pourquoi Ctrl+m et Ctrl+q ne sont-ils pas utilisés dans les raccourcis Bash ?

  4. Dans `while Ifs=Read..`, Pourquoi Ifs n'a-t-il aucun effet ?

  5. Pourquoi le numéro de lecteur/partition est-il toujours utilisé ?

Pourquoi j'utilise exa au lieu de ls sous Linux

Linux vs Mac OS :15 raisons d'utiliser Linux au lieu de Mac OS

Tronquer un fichier en cours d'utilisation (Linux)

Pourquoi certains programmeurs du noyau utilisent-ils goto au lieu de simples boucles while ?

pourquoi la liste des frères et sœurs est utilisée pour obtenir le task_struct lors de la récupération des enfants d'un processus

Pourquoi hexdump essaie-t-il de lire EOF ?