Das Ergebnis von lsb_release kann in Bash nicht mit einer Zeichenfolge verglichen werden

Das Ergebnis von lsb_release kann in Bash nicht mit einer Zeichenfolge verglichen werden

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 -ieinen 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 \tam 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

verwandte Informationen