Problème d'égalité entre deux chaines de caractères [Résolu]

Signaler
-
 Ouss91 -
Bonjour,

Je débute en Bash et ca fait toute la journée que je travaille sur un bout de code que voici :

echo "Qui est le réalisateur de Gran Torino ?"
read reponse
reponseVrai=$(cat cinema_bdd.txt | grep "Gran Torino" | awk -F: '{print $5}')
if [[ "$reponse" == "$reponseVrai" ]]
then
echo "correspond"
else
echo "ne correspond pas"
fi


Le problème est que même quand je saisi la bonne réponse, ca affiche "ne correspond pas".
J'ai décomposé le code et tout marche. A la suite de plusieurs test que j'ai fait, j'en ai conclu que le problème vient de là if [[ "$reponse" == "$reponseVrai" ]]
Des idées ?
MERCI !

3 réponses

Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
5 962
Salut,

$(cat cinema_bdd.txt | grep "Gran Torino" | awk -F: '{print $5}')

peut se réduire à
$(awk -F: '/Gran Torino/ {print $5}' cinema_bdd.txt)


Ensuite enlève les quotes dans ton "if" :
if [[ $reponse == $reponseVrai ]] 


Et pour finir rajoute
set -xv
après ton shebang pour débuguer ton code.

Le fichier cinema_bdd.txt est bien au format UNIX ?

Bonsoir zipe31,

Merci pour ton aide.

Je viens de régler le problème : c'était dans le fichier texte :

Gran Torino:1h56:2008:Drame Thriller:Clint Eastwood

J'ai rajouté un ':' à la fin de la ligne et le code à marcher.
Le programme agissait sur le dernier champ, or il n'y avait pas de délimiteur, ce qui posait donc problème à mon humble avis
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
5 962
Le programme agissait sur le dernier champ, or il n'y avait pas de délimiteur, ce qui posait donc problème à mon humble avis
Non, ça n'a aucune incidence.
Par contre, s'il y avait un caractère invisible, comme un espace par exemple, là ça changeait tout au niveau de la comparaison des chaînes -\
D'accord donc c'était sûrement un espace !
Je te remercie !