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

Shell et commandes GNU Discussion :

eval sur variable avec des espaces


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 159
    Points : 46
    Points
    46
    Par défaut eval sur variable avec des espaces
    Bonjour,

    j'ai un problème dans mon code !

    Je récupère une variable en base (un pattern de chemin) qui contient elle même un nom de variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    parambase=/home/${chemin}/
    La variable $chemin est déjà valorisée dans mon code, par contre sa valeur contient potentiellement des espaces
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chemin="repertoire/mon deuxieme repertoire/log"
    A la récupération depuis la base, il me faudrait la valeur finale, c'est à dire : /home/repertoire/mon deuxieme repertoire/log/

    quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval maVariableFinale=$parambase
    Si je n'ai pas d'espace dans le nom du chemin ça ne pose aucun problème, par contre dès que j'ai espace ça plante !


    Merci de votre aide car je ne trouve pas de solution

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Tu as déjà en partie donné la solution : il faut ajouter des guillemets.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval $maVariableFinale="$parambase"
    ou si ça ne suffit pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval "$maVariableFinale='$parambase'"
    (désolé, je n'ai pas les moyens de tester)
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Bonjour,

    Je récupère une variable en base
    en base quoi ? en base deux ? en base dix ?
    je ne comprends pas cette expression : « récupérer une variable en base » !

    le code doit-il être portable/POSIX ?
    sinon, j'utiliserais un tableau associatifs :
    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    declare -A assoc
    chemin="chemin/vers ailleurs"
    assoc["$variable"]="$chemin"
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 159
    Points : 46
    Points
    46
    Par défaut
    Quand je parle de base, c'est base de données.

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Bonjour,

    Les 2 premières syntaxes sont fausses pour des déclarations de variables.

    La troisième (avec eval) est douteuse...

    Peux-tu être plus explicite sur ton souci ?

    Et nous indiquer aussi sous quel OS/shell tu travailles ?
    Cordialement.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 159
    Points : 46
    Points
    46
    Par défaut
    Bonjour

    j'ai corrigé les syntaxes, je me suis planté en tapant le message.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    chemin="repertoire/mon deuxieme repertoire/log"
    parambase=/home/${chemin}/
    eval "maVariableFinale='$parambase'"
    echo maVariableFinale:$maVariableFinale

  7. #7
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Je ne comprends pas le souci et surtout le besoin du eval:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ chemin="repertoire/mon deuxieme repertoire/log"
    $ parambase=/home/"${chemin}"/
    $ echo $parambase
    /home/repertoire/mon deuxieme repertoire/log/
    $ maVariableFinale="$parambase"
    $ echo $maVariableFinale
    /home/repertoire/mon deuxieme repertoire/log/
    L'évaluation de la variable ne se fait pas au moment du echo mais au moment de l'affectation.
    Cordialement.

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    ah, mais s'il n'y a que ça (mais il nous faudrait la commande sql et la requête) :
    Code par exemple : Sélectionner tout - Visualiser dans une fenêtre à part
    maVarFin=$(sql -x '...printf "/home/" + <RESULTAT_REQUETE>')
    autant que je me souvienne, les SQL que j'ai utilisé peuvent concaténer/formater les résultats d'une requête avec des données constantes.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/01/2009, 10h38
  2. Faire suivre une variable avec des espaces
    Par jonathan34 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 14/02/2008, 20h57
  3. Réponses: 2
    Dernier message: 08/07/2004, 01h04
  4. Erreur sur IIS avec des cripts ASP
    Par Alin dans le forum ASP
    Réponses: 7
    Dernier message: 22/06/2004, 14h15
  5. Réponses: 2
    Dernier message: 06/12/2002, 07h50

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