WinFuture-Forum.de: [Bash] Array als Parameter an Funktion - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Software
Seite 1 von 1

[Bash] Array als Parameter an Funktion

#1 Mitglied ist offline   Erte 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.049
  • Beigetreten: 03. Januar 07
  • Reputation: 0

geschrieben 12. April 2012 - 09:26

Hallo zusammen

Ich versuche gerade ein Funktion zu schreiben, die ich in einem anderen Script includen kann, damit ich dann ein Array als Parameter übergeben kann. Allerdings bringe ich es nicht fertig dass er dieses Array als solches handhabt. Kann mir jemand sagen was ich falsch mache?

Das Hauptscript sieht wie folgt aus:
. ./modules/check_files.sh

VAR=("/tmp/test" "/tmp/test2")

ifExist $VAR[@]


Die check_files.sh sieht wie folgt aus:
function ifExist() {
	declare -a DIRS=("${!1}")
	RC=0

	for i in "${DIRS[@]}"
	do
		if [ -f $i ]
		then
			RC=1
		fi
	done
	
	return $RC
}


Ich habe bereits verschiedene Schreibweisen für das Array ausprobiert, aber nichts klappt so wie es soll. Ich will lediglich im Hauptscript ein Array erstellen können, in dem ich Dateien angebe die überprüft werden sollen. Dieses Array soll an die Funktion übergeben werden, die den Return Code auf 1 setzt, sollte eine der Dateien existieren.

Der Loop selber scheint sauber zu sein, wenn ich das Array in der Funktion selber setze, dann loopt er schön durch. Das Problem liegt also bei der Übergabe des Parameters.

Vielen Dank schonmal
Erte

Dieser Beitrag wurde von Erte bearbeitet: 12. April 2012 - 09:56

0

Anzeige

#2 Mitglied ist offline   sкavєи 

  • Gruppe: aktive Mitglieder
  • Beiträge: 6.447
  • Beigetreten: 20. Juli 04
  • Reputation: 57

geschrieben 14. April 2012 - 07:28

Wenn ich das richtig sehe sind das hier:
VAR=("/tmp/test" "/tmp/test2")
zwei Parameter.

Sofern du das weiterhin so übergeben willst, musst du im aufgerufenen Script die Einzelparameter in dein Array parsen. Irgendwas in dieser Art (ungeprüft und schnell dahingeschrieben) müsste dafür funktionieren:
while [ ${#} -gt 0 ]; do
	DIRS=${1}
	shift
done


Alternativ kannst du auch die einzelnen Parameter direkt als Array übergeben, was du aber bisher nicht machst. Du übergibst mehrere Einzelparameter.

Dieser Beitrag wurde von sкavєи bearbeitet: 14. April 2012 - 07:34

Eingefügtes Bild
Eingefügtes Bild
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0