MoonKid hat geschrieben:
./bp/buhtzyparanoid.sh: Zeile 100: [: =: Einstelliger (unärer) Operator erwartet.
Wenn man verstanden hat, dass die Shell
nur Textersatz macht, dann ist die Meldung klar.
Hier wird `$size' ersetzt durch seinen Wert. In deinem Fall ist die Variable undefiniert, somit ist ihr Wert leer. Die Shell macht also folgendes daraus:
Dadurch geht dem *binaeren* Operator `-eq' der linke Operand verloren. Die Shell beklagt sich, dass ohne linken Operand nur ein unaerer Operator Sinn macht. Sie haette genausogut sagen koennen, dass ihr fuer den binaeren Operator `-eq' der linke Operand fehlt. Das waere die wohl sinnvollere Fehlermeldung gewesen.
Da die Shell nunmal nur Textersatz macht muss sich der User manuell um die Einheit von Woertern und um besondere Strings kuemmern.
Haettest du doppelte Anfuehrungszeichen genommen, dann waere aus
mit leerem `size' Folgendes geworden
Der linke Operand waere also nicht ``verschwunden''.
Ebenso, wenn ein Variablenwert Whitespace enthaelt und man laesst die Quotes weg, dann erkennt die Shell nach der Variablenexpansion dort mehrere Worte, statt einem mit Whitespace.
(Ganz anders ist das bei Perl, PHP und Co. Die ersetzen Variablen durch ihren Wert unter Aufrechterhaltung des lexikalischen Tokens.)
Faustregel: Indem man Double Quotes verwendet liegt man fast immer richtig.