• [^] # Re: eval expr...

    Posté par . En réponse au message Quoter une variable contenant des arguments de ligne de commande. Évalué à 2. Dernière modification le 17 juin 2013 à 13:26.

    Je voulais en avoir le coeur net.
    1) peu-importe le format de liste utilisé, il y a moyen d'arriver avec eval
    2) on ne sait pas utiliser les backquotes sans eval; le problème c'est que le shell fait l'expansion glob après celle des backquotes. Le eval dans ce cas sert à retirer les backslashs :-/

    showarg.sh (chmod +x):

    #! /bin/sh
    while [ -n "1ドル" ]
    do
    echo "arg: 1ドル"
     shift 1
    done
    
    

    test.sh:

    mkdir -p /tmp/t/A /tmp/t/B; touch /tmp/t/A/a
    liste1="--exclude \"/tmp/t/A/*\" --exclude \"/tmp/t/B*\""
    liste2="--exclude '/tmp/t/A/*' --exclude '/tmp/t/B*'"
    liste3="--exclude /tmp/t/A/* --exclude /tmp/t/B*"
    set -x
    echo OK
    eval ./showargs.sh $liste1
    eval ./showargs.sh $liste2
    eval ./showargs.sh `echo "$liste3" | sed 's/\*/\\\*/g' `
    echo NOK: quote dans le argv
    ./showargs.sh $liste1
    ./showargs.sh $liste2
    ./showargs.sh `echo $liste1`
    ./showargs.sh `echo $liste2`
    ./showargs.sh `echo "$liste1"`
    ./showargs.sh `echo "$liste2"`
    echo NOK: expansion glob
    ./showargs.sh $liste3
    eval ./showargs.sh $liste3
    ./showargs.sh `echo $liste3`
    ./showargs.sh `echo "$liste3"`
    ./showargs.sh `eval echo $liste1`
    ./showargs.sh `eval echo $liste2`
    ./showargs.sh `eval echo $liste3`
    echo NOK: backslashs
    ./showargs.sh `echo "$liste3" | sed 's/\*/\\\*/g' `