배열에 액세스하는 이 함수는 어떻게 작동하나요?

배열에 액세스하는 이 함수는 어떻게 작동하나요?

문자열이 배열에 있는지 확인하고 싶습니다. Google에서 다음 기능을 찾았습니다. 하지만 이 기능의 의미를 완전히 이해할 수는 없습니다. 이 함수에서는 match일치시킬 문자열이 할당됩니다. 그런데 배열은 어디에 저장되어 있나요? 일부 출력을 추가했지만 변수는 e항상 비어 있습니다. 무슨 뜻인지 찾아봤습니다 shift. 변수를 왼쪽과 $2으로 이동합니다 $1. 그러나 그것은 쓸모없게 되었습니다 $1. 이 기능이 어떻게 작동하는지 아는 사람이 있나요? 매우 감사합니다.

containsElement () {
      local e match="$1"
      echo $match
      echo $e
      shift
      echo $e
      echo $match
      for e; do [[ "$e" == "$match" ]] && return 0; done
      return 1
    }
array=("something to search for" " for" "a string" "test2000")
containsElement "a string" "${array[@]}"
echo $?

답변1

남자 배쉬에서 :

~을 위한이름[ [ 존재하다 [단어...]]; ] 하다목록;완료
...
"인 경우"단어" 생략하면 for 명령이 실행됩니다. 목록 각 위치 인수 세트마다 한 번씩

실제로는 동일한 작업을 수행합니다.

for e in "$@"; do

명령 후에는 shift루프 반복의 위치 인수에 배열 요소만 남습니다.for

관련 정보