Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > Unix
Unix Forum d'entraide sur les systèmes Unix et dérivés (*BSD, AIX, etc.). Avant de poster ->F.A.Q BSD F.A.Q. Aix
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 12/03/2010, 17h15   #1
Futur Membre du Club
 
Inscription : novembre 2004
Messages : 67
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 67
Points : 15
Points : 15
Par défaut eval vs `` et incrementation variables

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
Jeff.p18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2010, 07h33   #2
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 910
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 910
Points : 1 261
Points : 1 261
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*
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2010, 16h11   #3
Futur Membre du Club
 
Inscription : novembre 2004
Messages : 67
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 67
Points : 15
Points : 15
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.
Jeff.p18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 03h38   #4
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 910
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 910
Points : 1 261
Points : 1 261
Citation:
Envoyé par Jeff.p18 Voir le message
merci mais j'ai un doute sur le faite que `` ne substitue pas les variables
Quel est ce doute ? Peux tu donner un exemple ?
Citation:
... tu aurais un lien vers ces quotes ? je trouve rien sur gogole par rapport à elles ... ?!? Merci.
man xxx
avec xxx=ton shell (ex: sh, ksh, bash, ...).
__________________
ɹǝsn *sıɹɐlos*
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2010, 16h03   #5
Futur Membre du Club
 
Inscription : novembre 2004
Messages : 67
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 67
Points : 15
Points : 15
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 !
Jeff.p18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2010, 17h59   #6
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 910
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 910
Points : 1 261
Points : 1 261
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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
$ a=22                                                
$ echo $a         
22
$ echo \$a
$a
$ eval echo \$a                                                                
22
$ (a=33;echo $a)                              
33                                            
$ eval "(a=33;echo $a)"
22
$ eval "(a=33;echo \$a)"
33
__________________
ɹǝsn *sıɹɐlos*
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2010, 15h43   #7
Futur Membre du Club
 
Inscription : novembre 2004
Messages : 67
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 67
Points : 15
Points : 15
je parlais d'expansion alors
merci pour l'exemple !
Jeff.p18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 18h04.


 
 
 
 
Partenaires

Hébergement Web