Angenommen, ich habe ein sehr großes Array. Gibt $large_list
es eine Möglichkeit, eine Funktion zu schreiben, die das Array als Argument verwendet? Zum Beispiel:
echo_idx_array () {
arr="$1"
idx="$2"
echo "${arr[$idx]}"
}
Was ist die übliche Strategie, um so etwas zu tun? Ich habe versucht, die Variable anzugeben, $large_list
aber sie war leer.
Ich bin bereit, die Funktion zu ändern, um sie an jede Änderung in der Argumentliste anzupassen.
Für die Aufzeichnung verwende ich ksh88 und suche nach Antworten, die so portabel wie möglich sind.
EDIT : Bisher war das Beste, was ich finden konnte, das Array zu durchlaufen und jedes Element als Argument an die Funktion zu senden. Dies scheint unglaublich hässlich und fehleranfällig zu sein, ganz zu schweigen davon, dass es schnell an ein Limit stoßen wird. Folgendes habe ich getan:
foo () {
echo $*
}
cmd="foo "
while [[ $i -lt $MAX_ARR_SIZE ]]; do
cmd="$cmd ${large_list[$i]}"
((i=i+1))
done
eval $cmd
Gibt es nicht etwas Besseres zu tun?
"${array[$@]}
. Ihr Vorschlag funktioniert tatsächlich. Mea culpa.
func "${array[@]}"
? Wenn Sie nur ein Element übergeben müssen, übergeben Sie einfach das Element - Sie müssen es nicht durch Übergeben eines Arrays und eines Index komplizierter machen.