다음과 같은 배열이 있습니다.
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번째 항목이 됩니다. 이는 비어 있지 않은 문자열이므로 true입니다.
그러나 모든 단어에 "AB"가 있기 때문에 두 조건이 모두 참입니다.
간단히 말해서, 그것은 이유가 아닙니다. 당신은 같은 결과를 얻게 될 ${moduleList["x"]}
것입니다. 또는 명명된 변수인 경우예숫자로 설정하면 배열에 적절한 항목이 표시됩니다.
$ moduleList=(AB, ABCdef, ABCd)
$ unset x
$ echo "${moduleList[x]}"
AB,
$ x=2
$ echo ${moduleList["x"]}
ABCd
일치하는 문자열이 있는지 찾기 위해 배열을 반복하거나 연관 배열로 변경하고 문자열을 키로 사용해야 합니다.
또한 할당에 쉼표를 사용하는 것이 아니라 위에 표시된 대로 값에 문자 그대로의 쉼표를 사용하는 것이 좋습니다.