0 Mitglieder und 1 Gast betrachten dieses Thema.
#!/bin/bash# Arraymy_array=( 0 1 2 3 7 7 6 7 8 9 )# Funktionfkt_echo_ein_array_element_pro_zeile() { for (( i=0; i<${#my_array[@]}; i++ )) do echo "$i: ${my_array[$i]}" done }# Funktionsaufruffkt_echo_ein_array_element_pro_zeile my_array
0: 01: 12: 23: 34: 75: 76: 67: 78: 89: 9
#!/bin/bash# Arraymy_array=( 0 1 2 3 7 7 6 7 8 9 )# Funktionfkt_echo_ein_array_element_pro_zeile() { arrayname=$1 # Übergabe von Eingabewert an Funktion for (( i=0; i<${#"$arrayname"[@]}; i++ )) # vmtl. fehlerhafte Zeile do echo "$i: ${arrayname[$i]}" done }# Funktionsaufruffkt_echo_ein_array_element_pro_zeile my_array
bash: i<${#"$arrayname"[@]}: Falsche Substitution
# Arraymy_array=( 0 1 2 3 7 7 6 7 8 9 ) # Funktionfkt_echo_ein_array_element_pro_zeile() { arrayname=$1 for (( i=0; i<${#arrayname[@]}; i++ )) do echo "$i: ${arrayname[$i]}" done } # Funktionsaufruffkt_echo_ein_array_element_pro_zeile my_array
0: my_array
my_array=( 0 1 2 3 7 7 6 7 8 9 )^-- SC2034: my_array appears unused. Verify use (or export if used externally).
# Funktionsaufruffkt_echo_ein_array_element_pro_zeile "${my_array[@]}"
arrayname=(${!1[@]}) #arrayname ist dann eine kopie von dem Array
Der Funktionsaufruf übergibt j anur den Text "my_array"Wenn Du das Array übergeben willst, dann so:Code: [Auswählen]Code: [Auswählen]# Funktionsaufruffkt_echo_ein_array_element_pro_zeile "${my_array[@]}"[/quote]# Arraymy_array=( 0 1 2 3 7 7 6 7 8 9 )# Funktionfkt_echo_ein_array_element_pro_zeile() { arrayname=$1 for (( i=0; i<${#arrayname[@]}; i++ )) do echo "$i: ${arrayname[$i]}" done }# Funktionsaufruffkt_echo_ein_array_element_pro_zeile "${my_array[@]}"Wenn ich das so mache, bekomme ich nur noch folgende Ausgabe:Code: [Auswählen]0: 0
# Funktionsaufruffkt_echo_ein_array_element_pro_zeile "${my_array[@]}"[/quote]# Arraymy_array=( 0 1 2 3 7 7 6 7 8 9 )# Funktionfkt_echo_ein_array_element_pro_zeile() { arrayname=$1 for (( i=0; i<${#arrayname[@]}; i++ )) do echo "$i: ${arrayname[$i]}" done }# Funktionsaufruffkt_echo_ein_array_element_pro_zeile "${my_array[@]}"
0: 0
# Funktionsaufruffkt_echo_ein_array_element_pro_zeile "${my_array[@]}"[/quote]# Arraymy_array=( 0 1 2 3 7 7 6 7 8 9 )# Funktionfkt_echo_ein_array_element_pro_zeile() { # tmp_array=(${1[@]}) # Alternativ das Array kopieren und unten dann "${tmp_array[@]}" vwerwenden for i in "${1[@]}" do echo "$i: ${1[i]}" done }# Funktionsaufruffkt_echo_ein_array_element_pro_zeile "${my_array[@]}"
Nun möchte ich das universeller gestalten und so das nicht in der Funktion der selbe Arrayname verwendet werden muss, sondern das ich den verwendeten Arrayname an die Funktion übergebe.
Ich dachte man programmiert um eine Eingabe automatisiert in eine Ausgabe zu verwandeln. Und zwar eine Ausgabe mit der man im weiteren etwas anfangen kann. Wie die Funktion oder das Array heißt, ist doch dabei völlig schnurz.Wenn du aber dem Programm von außen mitteilen möchtest wie das Array gefälligst zu heißen hat, das Programm ein Array diesen Namens jedoch nicht kennt, wundert mich nicht, dass es eine unerwartete Ausgabe erzeugt.
Wenn das Array übergeben wird, dann muss die Funktion angepasst werden:Code: [Auswählen]# Funktionsaufruffkt_echo_ein_array_element_pro_zeile "${my_array[@]}"[/quote]# Arraymy_array=( 0 1 2 3 7 7 6 7 8 9 )# Funktionfkt_echo_ein_array_element_pro_zeile() { # tmp_array=(${1[@]}) # Alternativ das Array kopieren und unten dann "${tmp_array[@]}" vwerwenden for i in "${1[@]}" do echo "$i: ${1[i]}" done }# Funktionsaufruffkt_echo_ein_array_element_pro_zeile "${my_array[@]}"
bash: ${1[@]}: Falsche Substitution.
Wenn du zwei verschiedene Arbeitsweisen im Skript implementieren möchtest, dann lege doch „Schalter“ an. Wenn bspw. der Parameter „-p“ übergeben wurde, dann arbeite so, wenn aber „-b“ übergeben wird, dann eben anders. Wahlweise auch in langer Schreibweise „--genauso“ bzw. „--ebenanders“. Auf die Idee, dem Anwender es aufzubürden, das Skript von außen neu zu skripten, weil er die Arraynamen richtig eintippen muss, käme ich erst nicht.
# Arraymy_array=( 0 1 2 3 7 7 6 7 8 9 )# Funktionfkt_echo_ein_array_element_pro_zeile() { local tmp_array=("$@") # Kopie for i in "${!tmp_array[@]}" do echo "$i: ${tmp_array[i]}" done }# Funktionsaufruffkt_echo_ein_array_element_pro_zeile "${my_array[@]}"
# ArrayCode: [Auswählen]my_array=( 0 1 2 3 7 7 6 7 8 9 )# Funktionfkt_echo_ein_array_element_pro_zeile() { local tmp_array=("$@") # Kopie for i in "${!tmp_array[@]}" do echo "$i: ${tmp_array[i]}" done }# Funktionsaufruffkt_echo_ein_array_element_pro_zeile "${my_array[@]}"
my_array=( 0 1 2 3 7 7 6 7 8 9 )# Funktionfkt_echo_ein_array_element_pro_zeile() { local tmp_array=("$@") # Kopie for i in "${!tmp_array[@]}" do echo "$i: ${tmp_array[i]}" done }# Funktionsaufruffkt_echo_ein_array_element_pro_zeile "${my_array[@]}"