シェルスクリプトの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_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[@]}"インデックスは実際に連続的である必要はないので、技術的にループを介してループする方が良いかもしれません。これは連想配列にも当てはまります。

おすすめ記事