bash if la declaración sigue cambiando el segundo argumento a una cadena literal

bash if la declaración sigue cambiando el segundo argumento a una cadena literal

Entonces no estoy seguro de por qué está haciendo esto. Mi declaración if sigue interpretando la segunda variable como una cadena literal en lugar de una variable. A continuación se muestra mi código exacto.

lights() {
  bulb1state=$(gatttool -b D8:6F:4B:09:AC:E6 --char-read -a 0x001b)
  echo $bulb1state
  bulb2state=$(gatttool -b DA:5A:4B:09:AC:E6 --char-read -a 0x001b)
  bulb3state=$(gatttool -b AC:E6:4B:07:39:E9 --char-read -a 0x0018)
  bulb4state=$(gatttool -b AC:E6:4B:08:40:50 --char-read -a 0x0018)
  offstate="Characteristic value/descriptor: 00 00 00 00"
  echo $bulb1state
  echo $offstate
  if [ "$offstate" = "$bulb1state" ]; then
    echo $bulb1state
    echo "bulb1 state = off"
    gatttool -b D8:6F:4B:09:AC:E6 --char-write -a 0x001b -n ff000000
    gatttool -b DA:5A:4B:09:AC:E6 --char-write -a 0x001b -n ff000000
    gatttool -b AC:E6:4B:07:39:E9 --char-write -a 0x0018 -n ff000000
    gatttool -b AC:E6:4B:08:40:50 --char-write -a 0x0018 -n ff000000
  fi
}  

Mi salida:

>lights
Characteristic value/descriptor: 00 00 00 00
Characteristic value/descriptor: 00 00 00 00
Characteristic value/descriptor: 00 00 00 00

No entiendo por qué no se muestran las últimas 2 declaraciones de eco.

Editar: había un espacio en blanco en bulb1state. Esto es lo suficientemente bueno como para encontrar una solución alternativa, pero todavía tengo curiosidad por saber por qué el segundo término de la declaración if se interpretaba como una cadena literal cuando usaba el operador "=" en lugar del operador "-eq". . Tampoco importaba qué variable era la primera o la segunda.

Respuesta1

Como comenté, es posible que tenga espacios adicionales en la salida de gatttool(es decir $bulb1state). Para la comparación debes usar =o ==(que son equivalentes), y para números -eq, veresta respuesta. Para ignorar los espacios adicionales que puedes hacer (veresta respuesta):

if [[ "$bulb1state" = "$offstate"* ]]; then
  #...
fi

información relacionada