![](https://seccdn.libravatar.org/avatar/4e9a8c604df1eb89f2b4a2cf588cc40b.jpg?s=120&d=mm&r=g)
Jan Trippler wrote:
On Die, 03 Jul 2001 at 18:15 (+0200), Bernd Obermayr wrote: [60 Zeilen Fullquote entfernt] [...]
Noch'n Tip: Du solltest (musst) alle Variablen die Text enthalten bei der Übergabe an ein Commando, quoten.
solltest, nicht _musst_! Muss nur dann, wenn die Variable leer sein kann _und_ wenn das Kommando an der Stelle zwingend etwas erwartet _und_ wenn die Variable Leerzeichen enthalten kann, aber als ein Argument dienen soll:
v="`ls *.txt`" # "", weil sonst in $v nur die erste Datei steht
for i in $v; do ... done # kein "", weil die Dateien in $v Einzelargumente sind
FINDOPT="-mtime +7" # "", weil sonst in $FINDOPT nur -mtime steht
find / $FINDOPT -print # kein "", weil FINDOPT auch wegbleiben kann
test "X$ADDRESSE" = XEOF
oder besser
test "X$ADDRESSE" = "XEOF"
Das X verhindert, dass ADDRESSE leer ist, die Quotes bewirken, dass test ADDRESSE als _ein_ Parameter behandelt wird.
Das ist doppelt gemoppelt. test "$Variable" = "Wert" reicht völlig aus - auch bei leerer Variable. Du kannst problemlos leere Inhalte abfragen: test "$Variable" = "" && ... oder test -n "$VARIABLE" && ... oder test -z "$VARIABLE" || ...
jaajjjjeiin... Ich habe Shellprogrammierung mit SCO 3.0 gelernt, da gabs diese netten switches bei test nicht und test hat auf alle Faelle bei einer leeren Variable gemeckert. Was Du vorschlaegst ist "programmiertechnisch" sauber, ok, aber erfordert eben mehrere Schritte. Wenn ich weiss, dass $Var nicht leer sein darf, muss ich das testen, wenn $Var aber leer sein darf, ist test "X$Var" = "X" sauber, elegant... und laeuft auch noch mit SCO 3.0 ;) Es spricht nichts dagegen alles zu quoten, ausser den Dingen bei denen man explizit weiss, dass man einzelne Parameter braucht. Nach meiner Erfahrung spart das eine Menge Sucharbeit. just my 10c so long... bernd