
Ich mache beim Stringvergleich unten etwas falsch. Es funktioniert, wenn ich eine Variable einstelle und diese vergleiche, aber ich kann den Wert nicht in einen String kopieren. Weiß jemand, was falsch ist?
$ if [ "$(lsb_release -i)" = "Distributor ID: RedHatEnterpriseClient" ]; then echo yes; else echo no; fi
no
$ lsb_release -i
Distributor ID: RedHatEnterpriseClient
$ var="$(lsb_release -i)"
$ if [ "$(lsb_release -i)" = "$var" ]; then echo yes; else echo no; fi
yes
Antwort1
In diesem Fall schlage ich vor -is
:
if [ $(lsb_release -is) = "Debian" ]; then echo yes; else echo no; fi
Antwort2
Das liegt daran, dass die Ausgabe lsb_release -i
einen Tabulator anstelle eines Leerzeichens verwendet:
lsb_release -i|od -c
0000000 D i s t r i b u t o r I D : \t
0000020 R e d H a t E n t e r p r i s e
0000040 S e r v e r \n
Beachten Sie das \t
am Ende der ersten Zeile. Fügen Sie es in Ihre Vergleichszeichenfolge ein, und es wird erfolgreich sein:
if [ "$(lsb_release -i)" = $'Distributor ID:\tRedHatEnterpriseServer' ]; ...
Antwort3
Es scheint keine gute Lösung zu sein, aber das hier funktioniert:
if [ "$(echo $(lsb_release -i))" = "Distributor ID: RedHatEnterpriseClient" ]; then echo yes; else echo no; fi