Невозможно сравнить результат 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 

3 Solutions collect form web for “Невозможно сравнить результат lsb_release с строкой в ​​Bash”

В этом случае я предлагаю -is :

 if [ $(lsb_release -is) = "Debian" ]; then echo yes; else echo no; fi 

Это потому, что вывод из lsb_release -i использует вкладку вместо пространства:

 lsb_release -i|od -c 0000000 D istributor ID : \t 0000020 R ed H at E nterprise 0000040 S erver \n 

Обратите внимание на \t в конце первой строки. Включите это в свою строку сравнения, и она будет успешной:

 if [ "$(lsb_release -i)" = $'Distributor ID:\tRedHatEnterpriseServer' ]; ... 

Это не похоже на хорошее решение, но это работает:

 if [ "$(echo $(lsb_release -i))" = "Distributor ID: RedHatEnterpriseClient" ]; then echo yes; else echo no; fi 
  • awk системный вызов с инвертированным эффектом
  • Как узнать, существует ли каталог?
  • Некоторые ошибки возникли, когда я установил lucene, модуль perl!
  • bash: -eq vs. == и `bc` тип вывода
  • чтобы проверить, действительно ли ввод действителен для ввода программ C
  • bourne shell, если
  • Как я могу использовать команды bash, если тесты и найти команды вместе?
  • Правильное литье типов в сценарии оболочки для использования с циклом while и модулем
  • Linux и Unix - лучшая ОС в мире.