
我在下面的字串比較中做錯了。如果我設定一個變數並進行比較,它會起作用,但我無法將值複製到字串。有人知道出了什麼問題嗎?
$ 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