Używam powłoki SH i próbuję porównać ciąg z wartością zmiennej, ale warunek if
jest zawsze wykonywany na wartość true. Czemu?Porównaj ciąg znaków w systemie Unix
Oto kod:
Sourcesystem="ABC"
if [ "$Sourcesystem" -eq 'XYZ' ]; then
echo "Sourcesystem Matched"
else
echo "Sourcesystem is NOT Matched $Sourcesystem"
fi;
echo Sourcesystem Value is $Sourcesystem ;
Nawet to nie działa:
Sourcesystem="ABC"
if [ 'XYZ' -eq "$Sourcesystem" ]; then
echo "Sourcesystem Matched"
else
echo "Sourcesystem is NOT Matched $Sourcesystem"
fi;
echo Sourcesystem Value is $Sourcesystem ;
Po drugie, możemy dopasować to z null lub pusty ciąg?
pierwsze w Bourne Shell nie trzeba dodatkowych ';' Kiedy testuję uruchomienie skryptu w powłoce Bourne'a, warunek if jest fałszywy. Najpierw ostrzeżesz: [: ABC: oczekiwane wyrażenie całkowite. Wyjście to: "System źródłowy NIE jest dopasowany ABC". Jak zauważyli inni, -eq jest używane do porównań całkowitych. Użyj pojedynczego znaku równości do porównania ciągów w powłoce Bourne'a (#!/Bin/sh). Twoja powłoka powinna była cię poprawić. –