Bash 쉘 스크립트에서 배열을 반복하면서 배열 인덱스 변수에 액세스하고 싶습니다.
myscript.sh#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
for i in ${AR[*]}; do
echo $i
done
위 스크립트의 결과는 다음과 같습니다.
foo
bar
baz
bat
내가 찾고 있는 결과는 다음과 같습니다.
0
1
2
3
이를 달성하기 위해 스크립트를 어떻게 변경할 수 있습니까?
답변1
다음을 사용하여 이 작업을 수행할 수 있습니다.배열 키 목록. bash
매뉴얼 페이지 에서 :
${!name[@]}
${!name[*]}
배열 키 목록. name이 배열 변수인 경우 name에 할당된 배열 인덱스(키) 목록으로 확장됩니다. name이 배열이 아닌 경우
0
name이 설정되면 null로 확장되고, 그렇지 않으면 null로 확장됩니다. 사용하고 큰따옴표 안에 확장이 발생 하면@
각 키는 별도의 단어로 확장됩니다.
귀하의 예를 들어:
#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
for i in "${!AR[@]}"; do
printf '${AR[%s]}=%s\n' "$i" "${AR[i]}"
done
그 결과는 다음과 같습니다.
${AR[0]}=foo
${AR[1]}=bar
${AR[2]}=baz
${AR[3]}=bat
이는 연속되지 않은 인덱스에도 적용됩니다.
#!/bin/bash
AR=([3]='foo' [5]='bar' [25]='baz' [7]='bat')
for i in "${!AR[@]}"; do
printf '${AR[%s]}=%s\n' "$i" "${AR[i]}"
done
그 결과는 다음과 같습니다.
${AR[3]}=foo
${AR[5]}=bar
${AR[7]}=bat
${AR[25]}=baz
답변2
Jordan의 답변 외에도 다음 C
에서 유사한 루프를 수행 할 수 있습니다 bash
.
for ((idx=0; idx<${#array[@]}; ++idx)); do
echo "$idx" "${array[idx]}"
done
답변3
인덱스와 값을 동시에 표시합니다(이 스크립트는 저에게 효과적이었습니다).
ARRAY=( "engineer " "CEO" "doctor" "teacher" )
for i in "${!ARRAY[@]}"
do
echo " index---------------content"
echo " $i ${ARRAY[$i]}"
done
답변4
다음을 수행할 수 있습니다.
#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
length=${#AR[@]}
for (( i = 0; i < length; i++ )); do
echo "$i"
done
산출:
0
1
2
3