Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/10/2015, à 11: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 smile


D.

Dernière modification par DonutMan75 (Le 29/10/2015, à 12:07)

Hors ligne

#2 Le 29/10/2015, à 11:36

pingouinux

Re : [RESOLU] [SH] IFS fonctionne mal ?

Bonjour,
Essaye avec

IFS=$'\t'

Hors ligne

#3 Le 29/10/2015, à 12: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, à 12:38

Postmortem

Re : [RESOLU] [SH] IFS fonctionne mal ?

Salut,

DonutMan75 a écrit :

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' :

man bash a écrit :

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, à 12:40)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#5 Le 29/10/2015, à 17: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