J'essaie de comparer le mois en cours que j'ai obtenu de l'utilitaire de date avec la saisie de l'utilisateur. Même lorsque je donne Oct comme entrée, cela donne un résultat incorrect.
read -r month
current=`date +”%b”`
echo $current
if [ "$month" = "$current" ];
then
echo "match"
else
echo "no "
fi
Je ne suis pas en mesure de comprendre pourquoi sa donne toujours comme sortie. Toute aide est appréciée.
"
) et non les autres (”
)Réponses:
En exécutant votre code et en entrant
Oct
à l'invite, vous obtenez:Evidemment, si vous avez entré
”Oct”
la comparaison serait vraie:Si vous ne voulez pas taper les deux fermeture des guillemets , supprimez-les simplement de la chaîne de comparaison:
De cette façon, vous pouvez simplement taper
Oct
et ça va correspondreOct
:Si vous souhaitez développer davantage votre programme, l'étape suivante pourrait consister à rendre la comparaison insensible à la casse: ainsi, vos utilisateurs pourront taper
oct
,Oct
ouOCT
sans se soucier de l'affaire appropriée.la source
Il y a une erreur très évidente dans votre code.
Ce sont les guillemets autour du format de date
contre
la source
=
.[ "$month" = "$current" ]
est parfaitement correct et sans doute plus correct que[ "$month" == "$current" ]
parce que le premier est POSIX et ce dernier ne l'est pas. Courirdash -c '[ a == a ]] && echo yes'
par exemple.=
contre==
est un problème de type C,[
s=
et==
sont généralement équivalents lorsque les deux sont pris en charge.]]
devrait être]
.)if [ "$month" = "$current" ];
. Ne pas utiliser le ==. Le problème vient du fait que OP a ajouté 2 caractères supplémentaires:”
to $ current, les 2 dates ne peuvent donc pas être égales.