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
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
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
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
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
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
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
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