como chamar funções do loop for no shell script

como chamar funções do loop for no shell script
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)
}

Estou recebendo o erro check_: comando não encontrado ao tentar chamar as funções check_item1 e check_item2.

Responder1

array_item= (item1 item2)

Não coloque espaços ao redor da =tarefa, isso não funciona. Além disso, isso me dá um erro de sintaxe sobre os parênteses. Você poderá obter o check_: command not founderro se os elementos da matriz não estiverem definidos ou vazios.

for (( i=0; i<${array_item[@]}; i++ ))

${array_item[@]}expande para todos os elementos do array, acho que você deseja ${#array_item[@]}o número de elementos. Se o array estiver vazio, isso também deverá gerar um erro, pois o outro operando da comparação estará faltando.

A for (( ... )) { cmds...}construção parece funcionar no Bash, mas o manual descreve apenas a for (( ... )) ; do ... ; doneconstrução usual.

Ou apenas use for x in "${array_item[@]}" ; do ... donepara percorrer os valores do array.

Se você precisar dos índices durante o loop, pode ser tecnicamente melhor fazer um loop over "${!array_item[@]}", já que os índices não precisam ser contíguos. Isso também funciona com matrizes associativas.

Responder2

Basta alterar seu loop for:

for index in ${array_item[*]}
    do
       check_$index
    done

Roteiro completo

#!/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: Além disso, as seguintes construções descoladas estão disponíveis:

${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

informação relacionada