
Я делаю что-то неправильно в сравнении строк ниже. Это работает, если я устанавливаю переменную и сравниваю ее, но я не могу скопировать значение в строку. Кто-нибудь знает, в чем проблема?
$ 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