it-swarm.com.de

Vergleichen Sie einen String mit sh shell

Ich verwende die SH-Shell und versuche, einen String mit dem Wert einer Variablen zu vergleichen, aber die Bedingung if wird immer mit true ausgeführt. Warum?

Hier ist ein Code:

Sourcesystem="ABC"

if [ "$Sourcesystem" -eq 'XYZ' ]; then 
    echo "Sourcesystem Matched" 
else
    echo "Sourcesystem is NOT Matched $Sourcesystem"  
fi;

echo Sourcesystem Value is  $Sourcesystem ;

Auch das funktioniert nicht:

Sourcesystem="ABC"

if [ 'XYZ' -eq "$Sourcesystem" ]; then 
    echo "Sourcesystem Matched" 
else
    echo "Sourcesystem is NOT Matched $Sourcesystem"  
fi;

echo Sourcesystem Value is  $Sourcesystem ;

Zweitens, können wir dies mit einer NULL oder einer leeren Zeichenkette abgleichen?

149
James Bond

Sie sollten den Operator = Für den Zeichenfolgenvergleich verwenden:

Sourcesystem="ABC"

if [ "$Sourcesystem" = "XYZ" ]; then 
    echo "Sourcesystem Matched" 
else
    echo "Sourcesystem is NOT Matched $Sourcesystem"  
fi;

man test Gibt an, dass Sie mit -z Nach leeren Zeichenfolgen suchen.

228
Mithrandir

-eq wird zum Vergleichen von ganzen Zahlen verwendet. Verwenden = stattdessen.

60
Piotr Praszmo

eq wird verwendet, um ganze Zahlen zu vergleichen. Verwenden Sie stattdessen das Gleiche '='. Beispiel:

if [ 'AAA' = 'ABC' ];
then 
    echo "the same" 
else 
    echo "not the same"
fi

viel Glück

24
Qign20

Ich hatte das gleiche Problem, mach das

if [ 'xyz' = 'abc' ];
then
echo "match"
fi

Beachten Sie das Leerzeichen. Es ist wichtig, dass Sie in diesem Fall ein Leerzeichen nach und vor dem = Schild.

Lesen Sie " Andere Vergleichsoperatoren ".

15
Eswar Yaganti

-eq ist der Shell-Vergleichsoperator zum Vergleichen von Ganzzahlen. Zum Vergleichen von Zeichenfolgen müssen Sie =.

8
codaddict

-eq Ist ein mathematischer Vergleichsoperator. Ich habe es nie zum Vergleichen von Zeichenfolgen verwendet und mich beim Vergleichen auf == Und != Gestützt.

if [ 'XYZ' == 'ABC' ]; then   # Double equal to will work in Linux but not on HPUX boxes it should be if [ 'XYZ' = 'ABC' ] which will work on both
  echo "Match"
else
  echo "No Match"
fi
6
Jason

Von den 4 Shells, die ich getestet habe, ABC -eq XYZ wird im test, das für zsh und ksh erstellt wurde, als true ausgewertet. Der Ausdruck ergibt false unter /usr/bin/test und die Builtins für dash und bash. In ksh und zsh werden die Zeichenfolgen in numerische Werte konvertiert und sind gleich, da beide 0 sind. IMO, das Verhalten der Builtins für ksh und zsh ist falsch, aber die Angabe für test ist nicht eindeutig.

3
William Pursell