Não é possível comparar o resultado de lsb_release para string em Bash

1

Estou fazendo algo errado na comparação de string abaixo. Ele funciona se eu definir uma variável e comparar isso, mas não posso copiar o valor para uma string. Alguém sabe o que há de errado?

$ 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
    
por Aidan Edwards 06.07.2017 / 16:15

3 respostas

2

Nesse caso, sugiro -is :

if [ $(lsb_release -is) = "Debian" ]; then echo yes; else echo no; fi
    
por 06.07.2017 / 17:50
3

Isso porque a saída de lsb_release -i usa uma guia em vez de espaço:

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

Observe o \t no final da primeira linha. Inclua isso na sua string de comparação e ela será bem-sucedida:

if [ "$(lsb_release -i)" = $'Distributor ID:\tRedHatEnterpriseServer' ]; ...
    
por 06.07.2017 / 17:35
0

Não parece uma boa solução, mas isso funciona:

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