132 votes

Quelle est la signification exacte de IFS=$'. \n ' ?

Si l'exemple suivant, qui définit le IFS variable d'environnement à un caractère de saut de ligne...

IFS=$'\n'
  • Que fait le signe du dollar moyenne exactement ?
  • Que fait-il dans ce cas précis spécifique ?
  • Où puis-je en savoir plus sur cet usage spécifique (Google n'autorise pas les caractères spéciaux dans les recherches et je ne sais pas quoi chercher d'autre) ?

Je sais ce que le IFS et ce qu'est la variable d'environnement \n est (saut de ligne), mais pourquoi ne pas simplement utiliser la forme suivante : IFS="\n" (qui ne fonctionne pas) ?

Par exemple, si je veux parcourir en boucle chaque ligne d'un fichier et que je souhaite utiliser une boucle for, je peux procéder comme suit :

for line in (< /path/to/file); do
    echo "Line: $line"
done

Cependant, cela ne fonctionnera pas correctement à moins que IFS est défini comme un caractère de saut de ligne. Pour que ça marche, il faudrait que je fasse ça :

OLDIFS=$IFS
IFS=$'\n'
for line in (< /path/to/file); do
    echo "Line: $line"
done
IFS=$OLDIFS

Note : Je n'ai pas besoin d'un autre moyen pour faire la même chose, j'en connais déjà beaucoup d'autres... Je suis seulement curieux à ce sujet $'\n' et je me demandais si quelqu'un pouvait me donner une explication à ce sujet.

1voto

Trix Points 9647

Question :

Quelle est la signification exacte de IFS=$'\n' ?

Réponse simple :

Hé Bash ! Mettez le Séparateur de champ interne (IFS) à Nouvelle ligne


Qu'est-ce que IFS ?

IFS est le caractère que Bash utilise comme limite de mot/élément lors du traitement des chaînes de caractères.

Il est fixé aux caractères d'espacement de espace , onglet y nouvelle ligne , par défaut .

Exemple 1 :

Utiliser la valeur par défaut pour IFS

string="first second:third forth:fifth"

for item in $string; do
    echo "$item"
done

Sortie :

first
second:third
forth:fifth

Exemple 2 :

Définir IFS à :

# Set the IFS to collon (:) character
IFS=:

string="first second:third forth:fifth"

for item in $string; do
    echo "$item"
done

Sortie :

first second  
third forth  
fifth

-8voto

Pieter Points 1205

C'est comme récupérer la valeur d'une variable :

VAR='test'
echo VAR
echo $VAR

sont différentes, donc le signe dollar évalue essentiellement le contenu.

6 votes

Cela n'a rien à voir avec les variables. $'FOO' (contrairement à $FOO qui n'était pas le sujet de la question) est une chaîne littérale. Si vous exécutez echo $'VAR' vous verrez qu'il imprime la chaîne de caractères VAR pas test .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X