
Estoy haciendo algo mal en la comparación de cadenas a continuación. Funciona si configuro una variable y la comparo, pero no puedo copiar el valor a una cadena. ¿Alguien sabe qué pasa?
$ 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
Respuesta1
En este caso te sugiero -is
:
if [ $(lsb_release -is) = "Debian" ]; then echo yes; else echo no; fi
Respuesta2
Esto se debe a que la salida lsb_release -i
utiliza una pestaña en lugar de espacio:
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
Observe el \t
al final de la primera línea. Inclúyalo en su cadena de comparación y tendrá éxito:
if [ "$(lsb_release -i)" = $'Distributor ID:\tRedHatEnterpriseServer' ]; ...
Respuesta3
No parece una buena solución, pero esto funciona:
if [ "$(echo $(lsb_release -i))" = "Distributor ID: RedHatEnterpriseClient" ]; then echo yes; else echo no; fi