Hi zusammen, ich habe folgendes Problem: Ein Script (A) wird bei mir mit mehreren Parametern aufgerufen, also z.b. A "test" "test\"2\"" etc. Dieses Script soll mit diesen Parametern wieder ein Script (B) aufrufen. Es enthält also: B "$1" "$2" Das Problem ist jetzt, dass die \" beim Aufruf von Script A zu " werden wenn ich das richtig verstanden habe. Deshalb funktioniert der Aufruf von Script B nicht so, wie ich es mir vorgestellt habe. Wie kann ich denn die Parameter nun wieder quoten? Geht das von der Shell aus? Also nach dem Schema: Quote $1 und $2 und dann: B "$1" "$2" Danke im voraus Mike
On 16 Jul 2002 at 2:10, Michael Gebhart wrote:
Hi zusammen,
ich habe folgendes Problem: Ein Script (A) wird bei mir mit mehreren Parametern aufgerufen, also z.b.
A "test" "test\"2\"" etc.
Dieses Script soll mit diesen Parametern wieder ein Script (B) aufrufen. Es enthält also:
B "$1" "$2"
Das Problem ist jetzt, dass die \" beim Aufruf von Script A zu " werden wenn ich das richtig verstanden habe. Deshalb funktioniert der Aufruf von Script B nicht so, wie ich es mir vorgestellt habe. Wie kann ich denn die Parameter nun wieder quoten? Geht das von der Shell aus?
[...] ungetestet! Hast Du mal in man bash nach $@ bzw. $* gesucht? Das könnte tun, was Du willst. Andreas
Hi, danke für Deine Antwort. $* und $@ enthalten aber doch nur alle Parameter, oder? Sie sind deswegen ja nicht gequotet... Mike
On 16 Jul 2002 at 13:00, Michael Gebhart wrote:
Hi,
danke für Deine Antwort. $* und $@ enthalten aber doch nur alle Parameter, oder? Sie sind deswegen ja nicht gequotet...
ich habe wohl heute meinen guten Tag (und hoffe, daß Du solche "Kleinigkeiten" demnächst selber ausprobieren kannst. Alle nötigen Hinweise hast Du schon!) akyek@pc105396:~ > more do*sh :::::::::::::: do1.sh :::::::::::::: echo do1: params are: $@ echo now call do2.sh ./do2.sh $@ :::::::::::::: do2.sh :::::::::::::: echo do2: params are: $@ akyek@pc105396:~ > ./do1.sh a b c do1: params are: a b c now call do2.sh do2: params are: a b c akyek@pc105396:~ > ./do1.sh "\"a\"" b c do1: params are: "a" b c now call do2.sh do2: params are: "a" b c akyek@pc105396:~ > Was willst Du noch? Andreas
Hallo Michael, * Michael Gebhart schrieb am 16.Jul.2002:
danke für Deine Antwort. $* und $@ enthalten aber doch nur alle Parameter, oder? Sie sind deswegen ja nicht gequotet...
Wenn in einem Argument ein Leerzeichen vorkommt [1] dann macht es einen Unterschied, was man nimmt: Eingabe: func foo "bar baz" $* und $@ enthalten beide "foo" "bar" "baz", also drei Argumente. Die "..." gehören nicht dazu, dienen hier nur zur Darstellung. In "$*" hingegen steht "foo bar baz" also nur ein Argument, auch nicht das, was man will. In "$@" schließlich steht "foo" "bar baz" also so, wie man es haben will. In $2 steht übrigens "bar" "baz" es werden aus einem Argument somit zwei, in "$2" hingegen steht "bar baz", so wie Du es willst. Richtig ist somit die Variable mit "..." zu klammern. Aber probier sowas doch mal selber aus. Schreib Dir dafür ein paar Prögrämchen und dann los. Ich habe ad hoc mal folgende geschrieben: == arg ========== #!/bin/bash for i do echo $i done ================= == arg1 ========= #/bin/bash echo '$@:' arg $@ echo '"$@"' arg "$@" echo '$*' arg $* echo '"$*"' arg "$*" ================= == arg2 ========= #/bin/bash echo '$1:' echo $1 echo '$2:' echo $2 echo "$2" arg1 "$1" "$2" ================= Da kannst Du beliebig drin rumändern, z.B was macht $# oder was ist, wenn man $IFS ändert? In IFS stehen die Trenner, die zwei Worte trennen. Normalerweise Leerzeichen, Tab und Neue Zeile. In $# steht die Anzahl der Argumente. [1] genauer: ein Zeichen, daß in der Umgebungsvariable $IFS steht. Bernd
participants (3)
-
Andreas Kyek
-
B.Brodesser@t-online.de
-
Michael Gebhart