Eine Initialisierung der Variablen mit dem Leerstring nützt nichts,
Du musst die Variable in [ ] (bzw. test-Kommando) quotieren (doppelte Anführungszeichen, damit die Shell den Wert substituiert).
Du kannst auch die Doppelklammern [[ ]] verwenden, die sind weniger zickig, was leere Variablen angeht.
Code: Alles auswählen
var1=foo
var2=""
[ $var1 = $var2 ]
bash: [: foo: unary operator expected
[ "$var1" = "$var2" ]
[[ $var1 = $var2 ]]
Um den Vergleichsoperator sind grundsätzlich Leerzeichen notwendig.
Das Test-Konstrukt [ $akku="" ] ist zwar zulässig, hat aber nicht die gewünschte Bedeutung.
Hier wird der Inhalt in den Klammern als einzelne Zeichenkette aufgefasst und getestet, ob diese Zeichenkette nicht-leer ist.
(nach Substitution der Variablen akku durch die Shell).
Es entspricht also einem Test mit der Option -n: