`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