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)
}
当尝试调用 check_item1 和 check_item2 函数时,我收到错误 check_: command not find 。
答案1
array_item= (item1 item2)
不要在=
赋值周围添加空格,否则不起作用。此外,这还会导致括号语法错误。check_: command not found
如果数组元素未设置或为空,则可能会出现此错误。
for (( i=0; i<${array_item[@]}; i++ ))
${array_item[@]}
扩展到数组的所有元素,我认为您想要${#array_item[@]}
元素的数量。如果数组为空,这也应该给出错误,因为比较的另一个操作数将丢失。
该for (( ... )) { cmds...}
结构似乎可以在 Bash 中工作,但该手册仅描述了常用的for (( ... )) ; do ... ; done
结构。
或者只是用来for x in "${array_item[@]}" ; do ... done
循环数组的值。
如果您在循环时确实需要索引,那么从技术上来说,循环遍历可能会更好"${!array_item[@]}"
,因为索引实际上不需要是连续的。这也适用于关联数组。
答案2
只需更改您的 for 循环:
for index in ${array_item[*]}
do
check_$index
done
完整剧本
#!/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
注意:此外,还可以使用以下时髦的结构:
${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