как вызывать функции из цикла for в скрипте оболочки

как вызывать функции из цикла 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_: команда не найдена при попытке вызова функций check_item1 и check_item2.

решение1

array_item= (item1 item2)

Не ставьте пробелы вокруг =in assignment, это не работает. Также это дает мне синтаксическую ошибку о скобках. Вы можете получить ошибку, 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

Связанный контент