Quoting von (potenziell leeren) Shellvariablen

22/04/2008 - 15:26 von Marc Haber | Report spam
Hi,

in einem Script (das spàter auch mit der dash funktionieren muss)
möchte ich gerne ein Kommando (some-command) aufrufen, dessen Optionen
aus drei verschiedenen Variablen kommen können.

Ich habe mir vor einiger Zeit angewöhnt, lieber zu viel als zu wenig
zu quoten, und so steht in meinem Script

some-command "$VAR1" "$VAR2" "$VAR3"

ich hoffe, dass ich mich auf diese Weise vor Shell-Metacharacters in
den Variablen schützen kann.

Wenn nun aber $VAR2 den leeren String enthàlt, bekommt some-command an
dieser Stelle einen leeren Parameter übergeben, und fàllt auf die
Schnauze. Der Autor von some-command ist der Meinung, das gehöre so.

Ich möchte nun gerne Operationen wie

if [ -n "$VAR2" ]; then
some-command "$VAR1" "$VAR2" "$VAR3"
else
some-command "$VAR1" "$VAR3"
fi

in den notwendigen Permutationen (auch VAR1 und VAR3 können leer sein)
vermeiden.

Wie mache ich das am geschicktesten? Führt wirklich kein Weg an

set -- "$VAR1" "$VAR2" "$VAR3"
some-command "$@"

vorbei (was mir im IRC als Lösung angeboten wurde, aber auch nicht
tut)?

Oder, anders herum gefragt: Welche Gefahr erzeuge ich, wenn ich die
Variablen nicht quote, und einfach some-command $VAR1 $VAR2 $VAR3
schreibe?

Grüße
Marc

Marc Haber | " Questions are the | Mailadresse im Header
Mannheim, Germany | Beginning of Wisdom " | http://www.zugschlus.de/
Nordisch by Nature | Lt. Worf, TNG "Rightful Heir" | Fon: *49 621 72739834
 

Lesen sie die antworten

#1 Juergen P. Meier
22/04/2008 - 15:43 | Warnen spam
Marc Haber <mh+:
Oder, anders herum gefragt: Welche Gefahr erzeuge ich, wenn ich die
Variablen nicht quote, und einfach some-command $VAR1 $VAR2 $VAR3
schreibe?



Wenn keine Leerzeichen drin vorkommen koennen, keine Gefahr.
Ansonsten macht das u.U. mehr Argumente draus als dir lieb ist.

Juergen
Juergen P. Meier - "This World is about to be Destroyed!"
end
If you think technology can solve your problems you don't understand
technology and you don't understand your problems. (Bruce Schneier)

Ähnliche fragen