#1 Le 21/05/2013, à 02:48
- fnux
[Résolu] Problème bash (ou sh) avec la fonction "read".
Bonjour tout le monde.
J'ai un nouveau problème de compréhension du fonctionnement de bash (ou de sh) avec l'instruction read.
Exemple :
#!/bin/sh
read -p "Does the Prince speak English (Y/n) ? : " ANSWER
if [ "$ANSWER" = "Y" ] || [ "$ANSWER" = "y" ]
then
echo "Hello PSG World!"
else
echo "Yes, the Prince speaks English but he doesn't talk to you!"
fi
Bon, là ça marche.
Mais si j'écris :
#!/bin/sh
QUESTION="Does the Prince speak English (Y/n) ? : "
read -p $QUESTION ANSWER
if [ "$ANSWER" = "Y" ] || [ "$ANSWER" = "y" ]
then
echo "Hello PSG World!"
else
echo "Yes, the Prince speaks English but he doesn't talk to you!"
fi
Alors, le contenu de la question ($QUESTION) posée n'affiche que "Does" et provoque une erreur.
Que dois-je faire pour que le message de la question ($QUESTION) soit affiché en entier car il semble bien que son contenu soit "tronqué" dès le premier espace rencontré dans la chaine de caractères de cette variable ($QUESTION) ?
Ou bien (solution alternative), il y aurait-il une astuce pour remplacer les "espaces" par un caractère "non visible" puisque le code suivant fonctionne :
#!/bin/sh
QUESTION="Does_the_Prince_speak_English_(Y/n)_?_:_"
read -p $QUESTION ANSWER
if [ "$ANSWER" = "Y" ] || [ "$ANSWER" = "y" ]
then
echo "Hello PSG World!"
else
echo "Yes, the Prince speaks English but he doesn't talk to you!"
fi
PS: on peut aussi remplacer "_" par "-" ou par "." mais dans tous les cas, le problème est alors une question de facilité de lecture du contenu de la question posée !
Merci d'avance de toute aide car mon but est de pouvoir écrire un script multi langues du genre :
#!/bin/sh
LANGUAGE=$LANG | cut 1,2
if [ "$LANGUAGE" = "fr" ]
then
QUESTION="Il ne parle pas Français Le Prince (O/n) ? : "
RESPONSE1="Salut le monde du PSG !"
RESPONSE2="Oui, le Prince parle Francais mais il parle pas a toi !"
else
QUESTION="Does the Prince speak English (Y/n) ? : "
RESPONSE1="Hello PSG World!"
RESPONSE2="Yes, the Prince speaks English but he doesn't talk to you!"
fi
read -p $QUESTION ANSWER
if [ "$ANSWER" = "Y" ] || [ "$ANSWER" = "y" ] || [ "$ANSWER" = "O" ] || [ "$ANSWER" = "o" ]
then
echo $RESPONSE1
else
echo $RESPONSE2
fi
et ainsi de suite pour d'autres langues.
Voili, voilou tout le problème.
Dernière modification par fnux (Le 21/05/2013, à 13:40)
N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
FWPBLA - The Froggies West Palm Beach Linux Association.
Hors ligne
#2 Le 21/05/2013, à 04:52
- grim7reaper
Re : [Résolu] Problème bash (ou sh) avec la fonction "read".
Salut,
Comme souvent en Bash, quand il y a des espaces dans une chaîne de caractères, il suffit de la mettre entre double quote.
#!/bin/sh
QUESTION="Does the Prince speak English (Y/n) ? : "
read -p "$QUESTION" ANSWER
if [ "$ANSWER" = "Y" ] || [ "$ANSWER" = "y" ]
then
echo "Hello PSG World!"
else
echo "Yes, the Prince speaks English but he doesn't talk to you!"
fi
Ce code fonctionne
Hors ligne
#3 Le 21/05/2013, à 13:39
- fnux
Re : [Résolu] Problème bash (ou sh) avec la fonction "read".
Salut grim7reaper,
Salut,
Comme souvent en Bash, quand il y a des espaces dans une chaîne de caractères, il suffit de la mettre entre double quote.
#!/bin/sh QUESTION="Does the Prince speak English (Y/n) ? : " read -p "$QUESTION" ANSWER if [ "$ANSWER" = "Y" ] || [ "$ANSWER" = "y" ] then echo "Hello PSG World!" else echo "Yes, the Prince speaks English but he doesn't talk to you!" fi
Ce code fonctionne
Effectivement, ça fonctionne et je n'y avais pas pensé.
Merci beaucoup.
Mais il faut bien avouer que ce qui est un peu déroutant est que :
avec : QUESTION="Does the Prince speak English (Y/n) ? : "
echo $QUESTION fonctionne très bien
alors que read -p $QUESTION ne fonctionne pas (il faut read -p "$QUESTION") !
Pourquoi faire simple quand ou peut faire compliqué ?
Dernière modification par fnux (Le 21/05/2013, à 18:36)
N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
FWPBLA - The Froggies West Palm Beach Linux Association.
Hors ligne