
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