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