如何在shell脚本中的for循环中调用函数

如何在shell脚本中的for循环中调用函数
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

相关内容