|
Publicité | ||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() Inscription : novembre 2004 Messages : 67 ![]() |
Bonjour,
1/ eval vs `` ------------ J'ai un peu de mal a saisir la difference exacte entre `` et eval ... Je croyais qu'il y en avait pas ... quelqu'un peut m'expliquer ? Laquelle des 2 méthodes vaut il mieux utiliser Eval marche mieux avec Awk que `` sinon, pourquoi ? run_awk=`"awk -F: '\$1==\"ECH$i\" {print \$2}' ${CFT_IN_DIR}/UHUHXXXX > ${CFT_IN_DIR}/${FICHIER_CFT}"` => plantage car $1 et $2 sont quand même substitués eval "awk -F: '\$1==\"ECH$i\" {print \$2}' ${CFT_IN_DIR}/UHUHXXXX > ${CFT_IN_DIR}/${FICHIER_CFT}" => ça marche il me fait mes awk en série avec clé de recherche modifiée 2/ incrementation variables -------------------------- je sais qu'on peut incrémenter une variable avec ceci : i=$(($i + 1)) quelqu'un peut m'expliquer cette syntaxe ? Merci beaucoup |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : juin 2007 Messages : 910 ![]() |
1: eval et `...` (ou mieux: $(...) ) n'ont pas grand chose en commun.
La première demande au shell d'évaluer les instructions qui suivent. C'est ce qu'il fait aussi quand on ne met pas eval mais la différence est que les variables sont substituées par leur valeur. C'est pour ça que ton exemple 2 fonctionne. La deuxième exécute une commande est retourne sa sortie dans la commande originale en tant que pseudo-variable. 2: Ca peut être simplifié en $((i+1)). Il n'y a pas grand chose a expliquer. $((...)) est la syntaxe qui indique qu'il s'agit de calcul numérique. $i + 1, ben c'est i plus 1 ...
__________________
ɹǝsn *sıɹɐlos* |
|
|
00
|
|
|
#3 |
|
Futur Membre du Club
![]() Inscription : novembre 2004 Messages : 67 ![]() |
merci mais j'ai un doute sur le faite que `` ne substitue pas les variables ... tu aurais un lien vers ces quotes ? je trouve rien sur gogole par rapport à elles ... ?!? Merci.
|
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() Inscription : juin 2007 Messages : 910 ![]() |
Citation:
Citation:
avec xxx=ton shell (ex: sh, ksh, bash, ...).
__________________
ɹǝsn *sıɹɐlos* |
||
|
|
00
|
|
|
#5 |
|
Futur Membre du Club
![]() Inscription : novembre 2004 Messages : 67 ![]() |
tu es sur qu'il y a pas de substitution pour ``
bon je veux bien te croire car sinon l'exemple dessous marcherait pas $2 serait remplacé par du vide mais j'aimerai bien le lire ... dans man ksh je vois rien ... $ cat test2.sh oblig=`echo "toto:1" | awk -F: '{print $2}'` echo $oblig $ test2.sh 1 sinon pour éviter la substitution avec eval il faut bien utiliser \ ? ex (au niveau de $2) : eval "awk -Fµ '\$1==\"ECH$i\" {print \$2}' ${CFT_IN_DIR}/$Groupe_fichiers > ${CFT_IN_DIR}/$tw.$date_fichiers" merci ! |
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() Inscription : juin 2007 Messages : 910 ![]() |
Il n'y a rien a substituer dans ton premier exemple puisque $2 est protégé par les ' '.
J'ai du mal à comprendre ce que tu cherches à faire et j'ai l'impression que tu confonds substitution, expansion et évaluation. substitution: $(...) et `...` sont remplacés par le résultat de l'exécution de "...". expansion: $abc est remplacé par le contenu de la variable abc évaluation: les paramètres passés à eval font l'objet d'expansion/substitution puis le résultat est exécuté par le shell Je te laisse méditer sur ces exemples: Code :
__________________
ɹǝsn *sıɹɐlos* |
||
|
|
00
|
|
|
#7 |
|
Futur Membre du Club
![]() Inscription : novembre 2004 Messages : 67 ![]() |
je parlais d'expansion alors
merci pour l'exemple ! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com