array_item= (item1 item2)
#function
check_item1 ()
{
echo "hello from item1"
}
check_item2 ()
{
echo "Hello from item2"
}
#calling functions
for (( i=0; i<${array_item[@]}; i++ ))
{
check_${array_item[$i]} # (expecting check_item1 then check_item2 funtion will be called)
}
Beim Versuch, die Funktionen check_item1 und check_item2 aufzurufen, erhalte ich den Fehler „check_: Befehl nicht gefunden“.
Antwort1
array_item= (item1 item2)
Setzen Sie keine Leerzeichen um die =
In-Zuweisung, das funktioniert nicht. Außerdem erhalte ich dadurch einen Syntaxfehler bezüglich der Klammern. Der check_: command not found
Fehler könnte auftreten, wenn die Array-Elemente nicht gesetzt oder leer sind.
for (( i=0; i<${array_item[@]}; i++ ))
${array_item[@]}
erweitert auf alle Elemente des Arrays, ich denke, Sie wollen ${#array_item[@]}
die Anzahl der Elemente. Wenn das Array leer ist, sollte dies ebenfalls einen Fehler ausgeben, da der andere Operand für den Vergleich fehlt.
Die for (( ... )) { cmds...}
Konstruktion scheint in Bash zu funktionieren, aber das Handbuch beschreibt nur die übliche for (( ... )) ; do ... ; done
Konstruktion.
Oder verwenden Sie es einfach, for x in "${array_item[@]}" ; do ... done
um eine Schleife über die Werte des Arrays zu erstellen.
Wenn Sie die Indizes während der Schleife benötigen, ist es technisch möglicherweise besser, die Schleife über auszuführen "${!array_item[@]}"
, da die Indizes nicht unbedingt zusammenhängend sein müssen. Das funktioniert auch mit assoziativen Arrays.
Antwort2
Ändern Sie einfach Ihre For-Schleife:
for index in ${array_item[*]}
do
check_$index
done
Vollständiges Skript
#!/bin/bash
array_item=(item1 item2)
#function
check_item1 ()
{
echo "hello from item1"
}
check_item2 ()
{
echo "Hello from item2"
}
for index in ${array_item[*]}
do
check_$index
done
NB: Darüber hinaus sind die folgenden Funky-Konstrukte verfügbar:
${array_item[*]} # All of the items in the array
${!array_item[*]} # All of the indexes in the array
${#array_item[*]} # Number of items in the array
${#array_item[0]} # Length of item zero