배열에서 정확한 문자열 검색

배열에서 정확한 문자열 검색

다음과 같은 배열이 있습니다.

moduleList=(AB, ABCdef, ABCd)

내 배열은 연관 배열이 아닌 숫자 인덱스 배열입니다. 배열의 각 요소를 정확히 일치시키고 특정 작업을 수행하고 싶습니다.

현재 나는 다음과 같은 일을 하고 있습니다:

if [[  ${moduleList["AB"]}  ]]; then
    #do this.
fi



if [[  ${moduleList["ABCdef"]}  ]]; then
    #do that.
fi

"AB"그러나 각 단어에 있는 것처럼 두 조건 모두 참이 됩니다 . 정확한 일치를 기반으로 각 조건을 어떻게 구별할 수 있습니까?

답변1

${moduleList["AB"]}또는 따옴표가 없는 동일한 변수는 라는 변수의 값을 가져와 AB이를 인덱스로 사용합니다. 해당 변수가 설정되지 않은 경우 얻는 값은 0이고 이는 AB배열의 0번째 항목인 으로 확장됩니다. 비어 있지 않은 문자열이므로 진실입니다.

그러나 각 단어에 "AB"가 있으므로 두 조건이 모두 충족됩니다.

간단히 말해서 이것은 이유가 아닙니다. 당신은 , 또는 무엇이든 같은 것을 얻을 것입니다 ${moduleList["x"]}. 또는 명명된 변수인 경우~이다숫자로 설정하면 배열에 적절한 항목이 표시됩니다.

$ moduleList=(AB, ABCdef, ABCd)
$ unset x
$ echo "${moduleList[x]}"
AB,
$ x=2
$ echo ${moduleList["x"]}
ABCd

일치하는 문자열이 존재하는지 찾기 위해 배열을 반복하거나 연관 배열로 변경하고 문자열을 키로 사용해야 합니다.

또한 할당에 쉼표를 원하지 않을 수도 있으며 위에서 본 것처럼 값에 문자 그대로의 쉼표가 표시됩니다.

관련 정보