bash 쉘 스크립트에서 배열 인덱스 변수를 반복하시겠습니까?

bash 쉘 스크립트에서 배열 인덱스 변수를 반복하시겠습니까?

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이 배열이 아닌 경우 0name이 설정되면 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

관련 정보