bash: zwei Arrays an Funktion übergeben

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
DonSam
Beiträge: 118
Registriert: 02.05.2005 21:55:31
Kontaktdaten:

bash: zwei Arrays an Funktion übergeben

Beitrag von DonSam » 12.11.2006 18:52:59

Hi!

Habe folgendes Problem: ich möchte zwei Arrays als Parameter an eine Funktion übergeben. Leider habe ich keinen eleganten Weg gefunden, dies zu erledigen.

gewünscht:

Code: Alles auswählen

myFunction ()
{
firstArray=$1
secondArray=$2
...
"do stuff with $firstArray, $secondArray"
...
}

##Main-Program
myFunction $Array_A $Array_B
Da bei dieser Verwendung jedoch nur der erste Wert der Arrays A und B in $1 und $2 kopiert werden, kann man diesen Ansatz in die Tonne treten.

Momentan verwende ich folgende hässliche "Frickellösung", bis ich etwas besseres gefunden habe:

Code: Alles auswählen

myFunction ${#Array_A[@]} ${#Array_B[@]} ${Array_A[@]} ${Array_B[@]}
Erklärung: $1 enthält dann Länge des Array_A, $2 Länge des Array_B. $3-$n enthalten die Elemente 0-n von Array_A, $n+1-$m enthalten die Elemente 0-m von Array_B

Dann werden alle Übergabeparameter in ein Array gepackt...

Code: Alles auswählen

for i in $*; do
TempArray[$n]=$i
n=$[$n+1]
done;
... und über zwei weitere hässliche for Schleifen werden schließlich die Elemente des TempArrays korrekt wieder in firstArray und secondArray aufgesplittet.

Ich bin mir sicher, dass ich das viel zu umständlich gemacht habe. Bitte helft mir!

Gruß
Sam
Ubuntu is an ancient African word meaning 'I can't configure Debian'.

Benutzeravatar
SubOptimal
Beiträge: 1709
Registriert: 10.01.2005 23:25:46
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: bei Frankfurt

Beitrag von SubOptimal » 19.11.2006 01:37:40

Hi,

schau mal hier das könnte eine Lösung sein. Oder zumindest ein Ansatz.

SubOptimal

Benutzeravatar
DonSam
Beiträge: 118
Registriert: 02.05.2005 21:55:31
Kontaktdaten:

Beitrag von DonSam » 19.11.2006 11:12:38

Hi,

vielen Dank für den Link. Soweit ich das Skript verstanden habe, ist es genau das wonach ich gesucht habe.

Gruß
Sam
Ubuntu is an ancient African word meaning 'I can't configure Debian'.

Antworten