bash se a instrução continuar mudando o segundo argumento para string literal

0

Não sei por que está fazendo isso. Minha instrução if continua interpretando a segunda variável como uma string literal em vez de uma variável. Abaixo está o meu código exato.

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
}  

Minha saída:

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

Eu não entendo porque as últimas 2 declarações de eco não estão sendo exibidas.

Editar: Havia um espaço branco no estado de bulbos. Isso é bom o suficiente para eu encontrar um trabalho, mas ainda estou curioso para saber porque o segundo termo da instrução if estava sendo interpretado como uma string literal quando eu usei o operador "=" em oposição ao operador "-eq" . Também não importava qual variável era a primeira ou a segunda.

    
por RocketTwitch 02.02.2016 / 10:11

1 resposta

0

Como comentei, você pode ter espaços extras na saída de gatttool (ou seja, $bulb1state ). Para a comparação, use = ou == (que são equivalentes) e, para os números -eq , consulte responder . Para ignorar os espaços extras que você pode fazer (veja esta resposta ):

if [[ "$bulb1state" = "$offstate"* ]]; then
  #...
fi
    
por 02.02.2016 / 10:58

Tags