`set' in der shell: Bug?

A. Dreyer (LUG-OWL) ml10227 at adreyer.com
Mon May 31 18:55:26 CEST 2010


On 31/05/10 16:34, Jan-Benedict Glaw wrote:
> Hallo!
> 
> Ich wollte mal fix die Parameter eines C'ischen Funktionsaufrufes
> in der shell parsen (und schmeiß' dafür die äußeren Klammern weg.)
> Wenn im Ergebnis ersteinmal noch die  ',' (am Ende eines jeden
> Arguments drin sind, wär' das kein Problem:
> 
> Input:
> 	asdf, "Foo this is", NULL, 17.3
> 
> Output soll sein, daß
> 
> 	$1 = adsf,
> 	$2 = Foo this is,
> 	$3 = NULL,
> 	$4 = 17.3
> 
> ist. Klappt auch, solange man
> 
> 	set asdf, "Foo this is", NULL, 17.3
> 
> macht, scheint aber fehlzuschlagen, wenn der Text aus einer Variablen
> kommt:
> 
> #!/usr/bin/env sh
> echo ${BASH_VERSION}
> set foo "bar baz" stuff
> echo "1: $1    2: $2   3: $3"
> X='foo "bar baz" stuff'
> set $X
> echo "1: $1    2: $2   3: $3"
> set `echo $X`
> echo "1: $1    2: $2   3: $3"
> 
> 
> Das ergibt dann:
> 
> 3.1.17(1)-release
> 1: foo    2: bar baz   3: stuff
> 1: foo    2: "bar   3: baz"
> 1: foo    2: "bar   3: baz"
> 
> 
> Erwartet hätte ich in allen drei Fällen das Ergebnis der ersten Zeile.
> Die Ergebnisse der zweiten und dritten Zeile halte ich für falsch.

Ich denke die Ausgaben sind korrekt..

> Comments?  Workarounds?

Spiel mal mit dem IFS (Input Field Separator) rum.. aber vergiss nicht
den urspruenglichen wert zu sichern.

--snip--
OLDIFS="$IFS"
X='asdf, "Foo this is", NULL, 17.3'
IFS="
,"
set $X
echo "1: $1    2: $2   3: $3"
IFS="$OLDIFS"
--snip--

.. da bleiben dann noch leading whitespaces aber ansonsten sollte es ok
sein.


Ciao,
Achim
-- 
A. Dreyer, Senior SysAdmin (UNIX&Network) / Internet Security Consultant



More information about the Linux mailing list