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
--
Linux mailing list [email protected]
subscribe/unsubscribe: http://lug-owl.de/mailman/listinfo/linux
Hinweise zur Nutzung: http://www.lug-owl.de/Mailingliste/hints.epo

Antwort per Email an