无法将 lsb_release 结果与 Bash 中的字符串进行比较

无法将 lsb_release 结果与 Bash 中的字符串进行比较

我在下面的字符串比较中做错了。如果我设置一个变量并进行比较,它会起作用,但我无法将值复制到字符串。有谁知道出了什么问题吗?

$ 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

相关内容