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