#1 Le 30/01/2013, à 00:51
Symbole de l'IFS
Bonsoir,
Voila plusieurs fois qu'en lisant des scripts, je tombe sur l'IFS, le fameux séparateur de champs. Je pensais avoir bien compris comment ce dernier fonctionnait. Mais sur certains code, je ne comprends pas. Par exemple, si j'ai un fichier texte de ce type :
ligne.txt :
aaa bbb ccc
ddd eee fff
ggg hhh iiiSi je fais ceci :
while IFS=$' ' read var1 var2 var3; do
echo $var1 $var2 $var3
done;Il va bien renvoyé sur chaque variable les valeurs voulu, var1=aaa, var2=bbb, var3=ccc puis var1=ddd,...ext. Ici, pas de problème, j'ai défini que mon séparateur de champs n'était autre qu'un espace.
Mais...Si je fais ceci :
IFS=:
echo $(cat ligne.txt)Il m'affiche le fichier telle que je l'ai présenté au départ. D'où ma question, à quoi fait allusion le ':' ? Qu'est ce que le shell comprend en lisant ce caractère ?
Merci d'avance et bonne soirée.
Hors ligne
#2 Le 30/01/2013, à 01:23
Re : Symbole de l'IFS
ça va marcher mieux avec:
export ISF=:ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor, OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)
Hors ligne
#3 Le 30/01/2013, à 01:34
Re : Symbole de l'IFS
$ cat fichier
cat:cot:cut
$ oIFS="$IFS"; IFS=':'; echo $(cat fichier ); IFS="$oIFS"
cat cot cutJe ne suis pas sûr d'avoir compris ce que tu espérais obtenir.
Dernière modification par Watael (Le 30/01/2013, à 01:34)
eval, c'est mal.
Hors ligne
#4 Le 30/01/2013, à 01:34
Re : Symbole de l'IFS
Si tu mets ça dans ton fichier de test:
aaa:bbb ccc qqq
ddd eee fff
ggg hhh iiiLa boucle suivante ne va pas réagir de la même manière avec IFS=' ' et IFS=':'
for i in `echo $(cat ligne.txt)`; do echo $i ;doneAvec l'espace (export IFS=\ ), ça donne:
aaa:bbb
ccc
qqq
ddd
eee
fff
ggg
hhh
iiiavec ':' (export IFS=:), ça donne ça:
aaa bbb ccc qqq
ddd eee fff
ggg hhh iiiASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor, OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)
Hors ligne
#5 Le 30/01/2013, à 06:39
Re : Symbole de l'IFS
Bonjour,
Pour compléter ce qui a été dit, dans l'exemple du #1, avec IFS=:, c'est var1 qui contient la ligne complète.
$ while IFS=' ' read var1 var2 var3; do echo "=$var1=$var2=$var3="; done <ligne.txt
=aaa=bbb=ccc=
=ddd=eee=fff=
=ggg=hhh=iii=$ while IFS=: read var1 var2 var3; do echo "=$var1=$var2=$var3="; done <ligne.txt
=aaa bbb ccc===
=ddd eee fff===
=ggg hhh iii===Hors ligne
#6 Le 31/01/2013, à 02:55
Re : Symbole de l'IFS
Trop fort, pingouinux....
Mais c'est quoi cet IFS, une variable globale d'environnement comme $PATH ou autre chose de spécial ?
ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor, OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)
Hors ligne
#7 Le 31/01/2013, à 07:24
Re : Symbole de l'IFS
@Maisondouf #6 :
IFS est une variable utiisée par le shell, au même titre que PATH. Voici un extrait de man bash :
IFS The Internal Field Separator that is used for word splitting
after expansion and to split lines into words with the read
builtin command. The default value is ``<space><tab><new‐
line>''.
Hors ligne
#8 Le 01/02/2013, à 01:10
Re : Symbole de l'IFS
OK, merci.
En plus il peut y avoir plusieurs caractères.... très intéressant...
ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor, OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)
Hors ligne
Pages : 1
- Accueil
- » Forum
- » Terminal, scripts et ligne de commande
- » Symbole de l'IFS
