Bash에서 반복 없이 배열의 마지막 요소 인덱스를 얻는 방법

Bash에서 반복 없이 배열의 마지막 요소 인덱스를 얻는 방법

Bash에서는 다음과 같이 전체 배열을 반복하지 않고 배열의 마지막(희소) 요소의 인덱스를 얻을 수 있습니까?

a=( e0 e1 ... )
i=0
while [ "$i" -lt $(( ${#a[@]} - 1 )) ]
do
  let 'i=i+1'
done
echo "$i"

적어도 bash v 4.2부터는 다음을 얻을 수 있습니다.배열의 마지막 요소 사용

e="${array[-1]}"

하지만 그건 날 이해하지 못할거야긍정적인다른 요소가 동일한 값을 가질 수 있으므로 색인을 생성합니다.

답변1

배열이 희박하지 않은 경우 마지막 인덱스는 요소 수 - 1입니다.

i=$(( ${#a[@]} - 1 ))

희소 배열의 경우를 포함하려면 인덱스 배열을 만들고 마지막 배열을 가져올 수 있습니다.

a=( [0]=a [1]=b [9]=c )

indexes=( "${!a[@]}" )
i="${indexes[-1]}"

echo "$i"
9

답변2

lst=( [0]=1 [1]=2 [9]=3 )
echo ${lst[@]@A}           # show elements and indexes
echo ${lst[-1]}            # last  element
echo ${!lst[@]}            # list of indexes
: ${!lst[@]} ; echo $_     # last index

관련 정보