Comment empeicher le Shell d'attraper une apostrophe contenue dans la var $*

Résolu
BillyV33 -  
lEprofSonDkon Messages postés 227 Statut Membre -
Bonjour, :)

J'ai un script qui est lancé de cette façon :

( $0 $1 $phrase)
./script ajouter <phrase qui contient l'apostrophe>

Mon script fonctionne bien sauf si je le lance avec une phrase qui contient une apostrophe
( ', ` ou ")

le problème et que dès que je fait ENTER sur le clavier j'ai une interaction <... et il attend quelque chose!
comment empêcher ce comportement?

./script ajouter on trouve toujours de l'aide bien instructif dans ce petit coin du monde!
>
>
...

^C
pour terminer!

#en gros je décale de un pour avoir juste la phrase

phrase="$1"
shift
phrase="$*"

#juste une fonction qui valide si fichier où je vais sauvegarde la phrase est bien existant (0) sinon (1)

valider_fich

#si fich n'existe pas il le créer et il ajoute la phrase

if [ "$code_validation" -eq 1 ]; then

echo "$phrase" > ~/fich

fi

mais je n'arrive jamais là ! je reste au >....

Merci beaucoup! :)

Configuration: Linux / Firefox 60.0

2 réponses

  1. BillyV33
     
    Bonjour,

    dans les exemples d'appel, je viens de me rendre compte qu'on a mit des "phase avec l’apostrophe" qui entourent la phrase
    dans ce cas tous fonctionne!
    Par contre jute par curiosité
    ... un read ?.. j'ai essayé mais rien ..
    il y a une solution pas trop compliquée pour ce genre de cas?

    Merci beaucoup
    0
  2. lEprofSonDkon Messages postés 227 Statut Membre 13
     
    il faut protéger l'apostrophe; soit en le mettant entre guillemets, soit en le protégeant avec un antislash.

    $*
    et
    $@
    sont équivalent, mais
    "$*"
    et
    "$@"
    ne le sont pas.

    essaie avec une boucle
    for
    :
    maFonc()
    {
       for i in $*; do echo "$i"; done
    }
    maFonc a "b c" d
    ensuite, remplace
    $*
    , par
    $@
    ,
    $@
    ,
    "$@"
    .

    tu verras la différence.
    0
    1. lEprofSonDkon Messages postés 227 Statut Membre 13
       
      UNE apostrophe -> "en la mettant", et "en la protégeant".

      illettré! :)
      0