IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Unix Discussion :

eval vs `` et incrementation variables


Sujet :

Unix

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 67
    Points : 41
    Points
    41
    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

  2. #2
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    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 ...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 67
    Points : 41
    Points
    41
    Par défaut
    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.

  4. #4
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    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 ?
    ... 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, ...).

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 67
    Points : 41
    Points
    41
    Par défaut
    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 !

  6. #6
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 67
    Points : 41
    Points
    41
    Par défaut
    je parlais d'expansion alors
    merci pour l'exemple !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment incrementer variable
    Par damien7258 dans le forum Django
    Réponses: 3
    Dernier message: 25/05/2010, 16h41
  2. Incrementation variable php dans fonction JS
    Par Emilie34 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 19/04/2010, 13h18
  3. eval vs `` et incrementation variables
    Par Jeff.p18 dans le forum Unix
    Réponses: 1
    Dernier message: 12/03/2010, 17h17
  4. IE eval et déclartion de variable à l'aide de "var "
    Par xorax dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 04/06/2007, 04h26
  5. Boucle avec variable à incrémenter
    Par snoop dans le forum Linux
    Réponses: 2
    Dernier message: 19/03/2004, 11h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo