OT: scripting Frage

Hallo bash Guru's folgende Schleife a="a \"b c\" d"; for i in $a; do echo ":$i:"; done erzeugt als Ausgabe: :a: :"b: :c": :d: Was muss ich machen, damit ich folgende Ausgabe erhalte: :a: :"b c": :d: Mit anderen Worten: wie schaffe ich es, daß "b c" als ein Wort betrachtet wird. Ich möchte also die gleiche Ausgabe erhalten, wie sie von set -- a "b c" d; for i in "$@"; do echo ":$i:"; done erzeugt wird. Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 9204871 Fax: +49(721) 24874 Juergen.Vollmer@[informatik-vollmer.de|alumni.uni-karlsruhe.de|acm.org] www.informatik-vollmer.de

On Wed, Jul 14, 2004 at 04:27:19PM +0200, Dr. Jürgen Vollmer wrote:
Hallo bash Guru's
folgende Schleife
a="a \"b c\" d"; for i in $a; do echo ":$i:"; done
a="a \"b\ c\" d"; for i in $a; do echo ":$i:"; done
erzeugt als Ausgabe:
:a: :"b: :c": :d:
Was muss ich machen, damit ich folgende Ausgabe erhalte:
:a: :"b c": :d:
Mit anderen Worten: wie schaffe ich es, daß "b c" als ein Wort betrachtet wird.
Ich möchte also die gleiche Ausgabe erhalten, wie sie von
set -- a "b c" d; for i in "$@"; do echo ":$i:"; done
erzeugt wird.
Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 9204871 Fax: +49(721) 24874 Juergen.Vollmer@[informatik-vollmer.de|alumni.uni-karlsruhe.de|acm.org] www.informatik-vollmer.de

ich:
folgende Schleife a="a \"b c\" d"; for i in $a; do echo ":$i:"; done erzeugt als Ausgabe: :a: :"b: :c": :d: Was muss ich machen, damit ich folgende Ausgabe erhalte: :a: :"b c": :d:
Hermann Gottschalk <hg@ostc.de>
a="a \"b\ c\" d"; for i in $a; do echo ":$i:"; done aber diese Schleife erzeugt bei mir auch nur: :a: :"b\: :c": :d:
also nicht das geforderte. Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 9204871 Fax: +49(721) 24874 Juergen.Vollmer@[informatik-vollmer.de|alumni.uni-karlsruhe.de|acm.org] www.informatik-vollmer.de

Dr. Jürgen Vollmer schrieb:
ich:
folgende Schleife a="a \"b c\" d"; for i in $a; do echo ":$i:"; done erzeugt als Ausgabe: :a: :"b: :c": :d: Was muss ich machen, damit ich folgende Ausgabe erhalte: :a: :"b c": :d:
Hermann Gottschalk <hg@ostc.de>
a="a \"b\ c\" d"; for i in $a; do echo ":$i:"; done
aber diese Schleife erzeugt bei mir auch nur: :a: :"b\: :c": :d:
also nicht das geforderte.
Wenn Du den Feldtrenner bestimmen kannst: oi=$IFS;IFS="§";a="a§b c§d"; for i in $a; do echo ":$i:";\ done;IFS=$oi :a: :b c: :d: -- Gruss Bernd

Am 14.07.2004 16:27 schrieb Dr. Jürgen Vollmer:
Hallo bash Guru's
folgende Schleife
a="a \"b c\" d"; for i in $a; do echo ":$i:"; done
erzeugt als Ausgabe:
:a: :"b: :c": :d:
Was muss ich machen, damit ich folgende Ausgabe erhalte:
:a: :"b c": :d:
Mit anderen Worten: wie schaffe ich es, daß "b c" als ein Wort betrachtet wird.
Ich möchte also die gleiche Ausgabe erhalten, wie sie von
set -- a "b c" d; for i in "$@"; do echo ":$i:"; done
erzeugt wird.
Bye Jürgen
a="a {\"b c\"} d"; for i in $a; do echo ":$i:"; done sowas in etwa ????

ich:
folgende Schleife a="a \"b c\" d"; for i in $a; do echo ":$i:"; done erzeugt als Ausgabe: :a: :"b: :c": :d: Was muss ich machen, damit ich folgende Ausgabe erhalte: :a: :"b c": :d:
manfred <freeman76de@yahoo.de>
a="a {\"b c\"} d"; for i in $a; do echo ":$i:"; done
leider nein, denn das erzeugt: :a: :{"b: :c"}: :d: Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 9204871 Fax: +49(721) 24874 Juergen.Vollmer@[informatik-vollmer.de|alumni.uni-karlsruhe.de|acm.org] www.informatik-vollmer.de

Am 14.07.2004 17:53 schrieb Dr. Jürgen Vollmer:
ich:
folgende Schleife a="a \"b c\" d"; for i in $a; do echo ":$i:"; done erzeugt als Ausgabe: :a: :"b: :c": :d: Was muss ich machen, damit ich folgende Ausgabe erhalte: :a: :"b c": :d:
manfred <freeman76de@yahoo.de>
a="a {\"b c\"} d"; for i in $a; do echo ":$i:"; done
leider nein, denn das erzeugt: :a: :{"b: :c"}: :d:
Bye Jürgen
a=(a "b c" d);for i in "${a[@]}";do echo ":$i:";done oder so, liste einlesen und dann array auswerten

ich:
folgende Schleife a="a \"b c\" d"; for i in $a; do echo ":$i:"; done erzeugt als Ausgabe: :a: :"b: :c": :d: Was muss ich machen, damit ich folgende Ausgabe erhalte: :a: :"b c": :d: Mit anderen Worten: wie schaffe ich es, daß "b c" als ein Wort betrachtet wird. Ich möchte also die gleiche Ausgabe erhalten, wie sie von set -- a "b c" d; for i in "$@"; do echo ":$i:"; done erzeugt wird.
vielen Dank für die vielen Vorschläge. Nur der Vollständigkeit halber: Hauke Laging <usenet-mail_07_2004@hauke-laging.de> hat in de.comp.os.unix.shell folgende Lösung vorgeschlagen: eval for i in $a\; do echo '":$i:";' done mit diesem Tip hab' ich mein eigentliches Problem lösen können. Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 9204871 Fax: +49(721) 24874 Juergen.Vollmer@[informatik-vollmer.de|alumni.uni-karlsruhe.de|acm.org] www.informatik-vollmer.de

Am 15.07.2004 09:16 schrieb Dr. Jürgen Vollmer:
ich:
folgende Schleife a="a \"b c\" d"; for i in $a; do echo ":$i:"; done erzeugt als Ausgabe: :a: :"b: :c": :d: Was muss ich machen, damit ich folgende Ausgabe erhalte: :a: :"b c": :d: Mit anderen Worten: wie schaffe ich es, daß "b c" als ein Wort betrachtet wird. Ich möchte also die gleiche Ausgabe erhalten, wie sie von set -- a "b c" d; for i in "$@"; do echo ":$i:"; done erzeugt wird.
vielen Dank für die vielen Vorschläge.
Nur der Vollständigkeit halber: Hauke Laging <usenet-mail_07_2004@hauke-laging.de> hat in de.comp.os.unix.shell folgende Lösung vorgeschlagen:
eval for i in $a\; do echo '":$i:";' done
sorry, die zeile verstehe ich nun nicht ?

ich:
eval for i in $a\; do echo '":$i:";' done
manfred <freeman76de@yahoo.de>
sorry, die zeile verstehe ich nun nicht ?
ein set -x; a="a \"b c\" d"; eval echo $a zeigt den Effekt: + a=a "b c" d + eval echo a '"b' 'c"' d ++ echo a 'b c' d ----------------^^^^^------------ a b c d eval wertet die vier Argumente a "b c" d von echo aus, und damit wird "b c" wieder zu einem Wort (Argument). Die for-Schleife sieht "b c" damit wieder als ein Wort und nicht als zwei Wörter. Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 9204871 Fax: +49(721) 24874 Juergen.Vollmer@[informatik-vollmer.de|alumni.uni-karlsruhe.de|acm.org] www.informatik-vollmer.de
participants (4)
-
Dr. Jürgen Vollmer
-
Hermann Gottschalk
-
Illuminatus@t-online.de
-
manfred