Ich versuche, den aktuellen Monat, den ich vom Datumsprogramm erhalten habe, mit der Benutzereingabe zu vergleichen. Selbst wenn ich Oct als Eingabe gebe, ist das Ergebnis falsch.
read -r month
current=`date +”%b”`
echo $current
if [ "$month" = "$current" ];
then
echo "match"
else
echo "no "
fi
Ich kann nicht verstehen, warum es immer no als Ausgabe gibt. Jede Hilfe wird geschätzt.
"
) und nicht die anderen (”
) verwendenAntworten:
Wenn Sie Ihren Code ausführen und
Oct
an der Eingabeaufforderung Folgendes eingeben, erhalten Sie:Wenn Sie
”Oct”
den Vergleich eingeben, ist dies offensichtlich richtig:Wenn Sie die beiden schließenden Anführungszeichen nicht eingeben möchten , entfernen Sie sie einfach aus der Vergleichszeichenfolge:
Auf diese Weise können Sie einfach
Oct
Folgendes eingebenOct
:Wenn Sie Ihr Programm weiter entwickeln wollen, könnte der nächste Schritt sein , den Vergleich Groß- und Kleinschreibung zu machen: auf diese Weise Ihre Benutzer geben könnten
oct
,Oct
oderOCT
ohne den richtigen Fall zu kümmern.quelle
Es gibt einen sehr offensichtlichen Fehler in Ihrem Code.
Sie sind die Anführungszeichen um das Datumsformat
vs
quelle
=
.[ "$month" = "$current" ]
ist vollkommen in Ordnung und wohl korrekter als[ "$month" == "$current" ]
weil das erstere POSIX ist und das letztere nicht. Führen Siedash -c '[ a == a ]] && echo yes'
zum Beispiel.=
vs==
ist ein C-ähnliches Problem,[
s=
und==
sind normalerweise gleichwertig, wenn beide unterstützt werden.]]
sollte sein]
.)if [ "$month" = "$current" ];
. Verwenden Sie nicht das ==. Das Problem ergab sich aus der Tatsache, dass OP 2 zusätzliche Zeichen hinzufügte:”
zu $ current, daher konnten die 2 Daten nicht gleich sein.