Невозможно сравнить результат lsb_release со строкой в ​​Bash

Невозможно сравнить результат lsb_release со строкой в ​​Bash

Я делаю что-то неправильно в сравнении строк ниже. Это работает, если я устанавливаю переменную и сравниваю ее, но я не могу скопировать значение в строку. Кто-нибудь знает, в чем проблема?

$ 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

решение1

В этом случае я предлагаю -is:

if [ $(lsb_release -is) = "Debian" ]; then echo yes; else echo no; fi

решение2

Это связано с тем, что в выводе lsb_release -iиспользуется табуляция вместо пробела:

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

Обратите внимание на \tв конце первой строки. Включите это в строку сравнения, и все получится:

if [ "$(lsb_release -i)" = $'Distributor ID:\tRedHatEnterpriseServer' ]; ...

решение3

Это не кажется хорошим решением, но это работает:

if [ "$(echo $(lsb_release -i))" = "Distributor ID: RedHatEnterpriseClient" ]; then echo yes; else echo no; fi

Связанный контент