Instruction sh

bernard -  
 bernard -
Bonjour, je suis un peu perplexe devant une instruction en sh. J'ai dans un répertoire un fichier toto.
cat toto -> f1 f2 f3
Dans ce même répertoire j'ai 2 fichiers : f1 qui contient 5 et f2 qui contient 6, jusque la facile, donc dans mon répertoire j'ai 3 fichiers : toto, f1 et f2 d'accord?


SI dans un script shell j'écris ceci:

read fic1 fic2 fic3 < "$1" ($1 représente le fichier toto dans mon cas)
read nb1 < $fic1

ça me met la valeur 5 dans la variable nb1. Mais je ne comprends pas du tout pourquoi...

Lorsqu'on fait read fic1 fic2 fic3 < $1 on met la valeur f1 dans fic1 vous êtes d'accord? Donc fic1 vaut f1.
Mais ensuite quand on a read nb1 < $fic1, on met la valeur du fichier f1 dans nb1, ce que je comprends pas du tout c'est pourquoi ici $fic1 est considéré comme la valeur du fichier f1 du répertoire, je ne comprends pas du tout, quelqu'un a t'il une explication svp?

merci

2 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

ça me met la valeur 5 dans la variable nb1. Mais je ne comprends pas du tout pourquoi...
Tout simplement parce que "read nb1 < $fic1" est équivalent à :
read nb1 < f1
Donc à transmettre le contenu de "f1" et non pas à assigner le nom de la variable.
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Pour affecter le contenu de la variable $fic1 et non pas l'interpréter :

 read nb1 <<< $fic1

0
bernard > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
mais la variable f1 n'est définie nulle part dans mon script, donc par défaut shell prend l'élément nommé f1 du répertoire?
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > bernard
 
Ben si elle est définie dans la mesure où tu l'as assignée indirectement dans ton 1er "read" à la variable "$fic1".
0
bernard
 
oui mais ce f1 c'est le f1 du fichier toto, or ici on met dans nb1 la valeur du fichier f1 du répertoire et non du f1 de toto...
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Parce que la variable est interprétée !!!

Pour ne pas qu'elle soit interprétée, voir message #2.
0
bernard > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
merci jipicy pour ces éclaircissements :)
0