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