Bash-If-Anweisung ändert das zweite Argument ständig in eine Literalzeichenfolge

Bash-If-Anweisung ändert das zweite Argument ständig in eine Literalzeichenfolge

Ich bin mir also nicht sicher, warum das passiert. Meine if-Anweisung interpretiert die zweite Variable immer als Literalzeichenfolge statt als Variable. Unten ist mein genauer Code.

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
}  

Meine Ausgabe:

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

Ich verstehe nicht, warum die letzten beiden Echo-Anweisungen nicht angezeigt werden.

Bearbeiten: Es gab ein Leerzeichen bei bulb1state. Das reicht mir, um eine Lösung zu finden, aber ich frage mich immer noch, warum der zweite Term der if-Anweisung als Literalstring interpretiert wurde, als ich den Operator "=" anstelle des Operators "-eq" verwendete. Es spielte auch keine Rolle, welche Variable zuerst oder als zweite kam.

Antwort1

Wie ich bereits erwähnt habe, kann es sein, dass die Ausgabe von gatttool(dh $bulb1state) zusätzliche Leerzeichen enthält. Für den Vergleich sollten Sie =oder verwenden ==(die Äquivalente sind) und für Zahlen -eqsiehediese AntwortUm die zusätzlichen Leerzeichen zu ignorieren, können Sie Folgendes tun (siehediese Antwort):

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

verwandte Informationen