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