정수 인덱스 배열 대신 다른 종류의 배열을 사용하십시오. 연관 배열을 사용하십시오. 따라서 키 (인덱스)는 확인할 것입니다. bash-4.0
이를 위해서는 나중에 필요합니다.
declare -A array1=(
[prova1]=1 [prova2]=1 [slack64]=1
)
a=slack64
[[ -n "${array1[$a]}" ]] && printf '%s is in array\n' "$a"
위에서 우리는 실제로 값에 신경 쓰지 않으며, 이것에 대해서는 비어 있지 않아야합니다. 키와 값을 교환하여 인덱스 배열을 새로운 연관 배열로 "반전"할 수 있습니다.
declare -a array1=(
prova1 prova2 slack64
)
declare -A map # required: declare explicit associative array
for key in "${!array1[@]}"; do map[${array1[$key]}]="$key"; done # see below
a=slack64
[[ -n "${map[$a]}" ]] && printf '%s is in array\n' "$a"
연관 배열의 구현은 배열 순회 루프보다 성능이 우수하기 때문에 자주 검색되는 큰 배열이있는 경우 비용을 지불 할 수 있습니다. 중복을 처리 할 수 없으므로 (위와 같이 1 대신에 카운터로 값을 사용할 수는 있지만) 빈 인덱스를 처리 할 수 없으므로 모든 사용 사례에 적합하지는 않습니다.
"반전"을 설명하기 위해 위의 복잡한 줄을 나누십시오.
for key in "${!a[@]}" # expand the array indexes to a list of words
do
map[${a[$key]}]="$key" # exchange the value ${a[$key]} with the index $key
done
array1
작업 은 어디 입니까?