#1 Le 29/10/2015, à 10:20
- DonutMan75
[RESOLU] [SH] IFS fonctionne mal ?
Bonjour,
j'ai un fichier qui contient N lignes contenant deux valeurs séparées par des tab.
Par exemple :
$ cat ./test.txt
1.23 2.41
3.28 4.45
J'ai écris un petit script sh pour récupérer les différentes valeurs.
#!/bin/sh
FILE="./toto.txt"
while read valeur1 valeur2
do
echo "+$valeur1+ et +$valeur2+"
done < $FILE
Pour le moment tout fonctionne bien... Je récupère bien les différentes valeurs :
$ ./test.sh
+1.23+ et +2.41+
+3.28+ et + 4.45+
J'ai voulu le rendre un peu plus robuste et imposer le IFS (en l'occurence tab) :
#!/bin/sh
FILE="./toto.txt"
IFS="\t"
while read lat long
do
# Traitement...
done < $FILE
Et là plus rien ne va plus :
$ ./test.sh
+1.23 2.41+ et ++
+3.28 4.45+ et ++
Où me suis-je trompé ? J'ai tenté IFS='\t' sans plus de succès....
Merci d'avance
D.
Dernière modification par DonutMan75 (Le 29/10/2015, à 11:07)
Hors ligne
#2 Le 29/10/2015, à 10:36
- pingouinux
Re : [RESOLU] [SH] IFS fonctionne mal ?
Bonjour,
Essaye avec
IFS=$'\t'
Hors ligne
#3 Le 29/10/2015, à 11:07
- DonutMan75
Re : [RESOLU] [SH] IFS fonctionne mal ?
Bonjour Pingouinux,
effectivement ça marche bien avec cette notation.
Merci beaucoup !
En revanche, je ne comprends pas du tout cette notation... Est-ce une convention ? $X signifie accéder à la valeur stockée dans la variable X non ?
A bientôt,
D.
Hors ligne
#4 Le 29/10/2015, à 11:38
- Postmortem
Re : [RESOLU] [SH] IFS fonctionne mal ?
Salut,
En revanche, je ne comprends pas du tout cette notation... Est-ce une convention ? $X signifie accéder à la valeur stockée dans la variable X non ?
${variable} : est remplacé par la valeur de variable
$(commande) : est remplacé par la sortie standard de la commande
$'string' :
Words of the form $'string' are treated specially. The word expands to string, with backslash-escaped characters replaced
as specified by the ANSI C standard. Backslash escape sequences, if present, are decoded as follows:
\a alert (bell)
\b backspace
\e
\E an escape character
\f form feed
\n new line
\r carriage return
\t horizontal tab
\v vertical tab
\\ backslash
\' single quote
\" double quote
\nnn the eight-bit character whose value is the octal value nnn (one to three digits)
\xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
\uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)
\UHHHHHHHH
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)
\cx a control-x character
Edit :
En faisant IFS="\t", tu attribues à la variable IFS, l’antislash et la lettre t.
Dernière modification par Postmortem (Le 29/10/2015, à 11:40)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#5 Le 29/10/2015, à 16:17
- DonutMan75
Re : [RESOLU] [SH] IFS fonctionne mal ?
Bonjour,
merci beaucoup, c'est plus clair maintenant.
Je ne connaissais pas cette notation.
D.
Hors ligne