Stephan Wezorke <swezo...@rbg.informatik.tu-darmstadt.de> writes: > Am Montag 11 Mai 2009 11:45:02 schrieb Jochen Hein: >> Stephan Wezorke <swezo...@rbg.informatik.tu-darmstadt.de> writes: >> > Hier noch mal ein Beispiel zur Verdeutlichung: >> > #!/bin/bash >> > list() { >> > echo $# # Gibt 0 aus, auch wenn man Parameter übergibt >> > while [ $# -gt 0 ] >> > do >> > echo $1 # Wird entsprechend erst garnicht aufgerufen. >> > done >> > } >> > list; >> >> Da solltest Du "list $*" machen. Oder halt die Parameter, die Du >> brauchst. Oder? > > Falls ich die Variablen nur ausgeben würde hättest du Recht. Das sollte hier > nur ein Beispiel sein, eigentlich mache ich so ein paar Sachen in der > Funktion.
Ja, aber woher soll denn die Funktion wissen, welche Werte sie bearbeiten soll? Das ist ja vollkommen unabhängig davon, was in der Schleife passieren soll. Hm, bei mir macht der "echo $#" genau das, was man erwartet - bei list 1 2 3;: [23:23:04]:echidna:(pts/3):~/scripts$ bash funtest.sh + list 1 2 3 + echo 3 3 Wenn ich list $* verwende, und mein Skript mit Parametern aufrufe, dann ist es auch ok. Hier mein Testscript: #!/bin/bash set -x list() { echo $# # Gibt 0 aus, auch wenn man Parameter übergibt while [ $# -gt 0 ] do echo $1 # Wird entsprechend erst garnicht aufgerufen. shift done } list 1 2 3; # oder list $* Wenn ich in der Funktion eine Variable setze, dann kommt es auch im Hauptprogramm an: #!/bin/bash set -x a=1 list() { echo $# # Gibt 0 aus, auch wenn man Parameter übergibt while [ $# -gt 0 ] do echo $1 # Wird entsprechend erst garnicht aufgerufen. shift done echo $a a=2 } list $*; echo $a Ich glaube, ich habe Dein Problem noch nicht verstanden. Jochen -- The only problem with troubleshooting is that the trouble shoots back. -- ---------------------------------------------------------------------------- PUG - Penguin User Group Wiesbaden - http://www.pug.org