Vergleich von Strings für Gleichheit in KSH
Frage
Ich teste mit dem Shell -Skript unten:
#!/bin/ksh -x
instance=`echo $1 | cut -d= -f2`
if [ $instance == "ALL" ]
then
echo "strings matched \n"
fi
Es gibt diesen Fehler in der IF -Bedingung:
: ==: unknown test operator
ist ==
Wirklich nicht die richtige Syntax? Ich laufe wie unten auf der Befehlszeile
test_lsn_2 INSTANCE=ALL
Könnte jemand bitte eine Lösung vorschlagen. Vielen Dank.
Lösung
Ich sehe, dass Sie KSH verwenden, aber Sie haben Bash als Tag hinzugefügt. Akzeptieren Sie eine Bash-bezogene Antwort? Mit Bash können Sie dies auf diese Weise tun:
if [[ "$instance" == "ALL" ]]
if [ "$instance" = "ALL" ]
if [[ "$instance" -eq "ALL" ]]
Sehen hier Für mehr dazu.
Andere Tipps
Um Strings zu vergleichen, benötigen Sie ein einzelnes =, kein Doppel. Und Sie sollten es in doppelte Zitate einfügen, falls die Zeichenfolge leer ist:
if [ "$instance" = "ALL" ]
then
echo "strings matched \n"
fi
Versuchen
if [ "$instance" = "ALL" ]; then
Es gab mehrere Fehler:
Sie benötigen doppelte Zitate um die Variable, um vor dem (unwahrscheinlichen) Fall zu schützen, dass es leer ist. In diesem Fall würde die Hülle sehen
if [ = "ALL" ]; then
Was ist nicht gültig.Gleich in der Shell verwendet eine einzelne
=
(Es gibt keine Möglichkeit, einen Wert in einem zuzuweisenif
in der Schale).
totest=$1
case "$totest" in
"ALL" ) echo "ok" ;;
* ) echo "not ok" ;;
esac
I'va already answered a similar question. Basically the operator you need is =
(not ==
) and the syntax breaks if your variable is empty (i.e. it becomes if [ = ALL]
). Have a look at the other answer for details.