Stephan Wezorke <[email protected]> writes:
> Am Montag 11 Mai 2009 11:45:02 schrieb Jochen Hein:
>> Stephan Wezorke <[email protected]> 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