Bash で lsb_release の結果を文字列と比較できない

Bash で lsb_release の結果を文字列と比較できない

以下の文字列比較で何か間違っています。変数を設定して比較すると動作しますが、値を文字列にコピーできません。何が間違っているのか知っている人はいますか?

$ 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

関連情報