bash shell script loop에서 array index 변수에 액세스하고 있습니까? do echo $i done 위 스크립트의

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

이것을 달성하기 위해 스크립트를 어떻게 변경합니까?



답변

배열 키 목록을 사용하여이 작업을 수행 할 수 있습니다 . 로부터 bash매뉴얼 페이지

${!name[@]}
${!name[*]}

배열 키 목록 . name이 배열 변수 인 경우 name에 지정된 배열 색인 (키) 목록으로 확장됩니다. name이 배열이 아닌 0경우 name이 설정되면 확장되고 그렇지 않으면 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

답변

jordanm의 답변 외에도 다음 C과 같은 루프를 수행 할 수 있습니다 bash.

for ((idx=0; idx<${#array[@]}; ++idx)); do
    echo "$idx" "${array[idx]}"
done

답변

당신은 이런 식으로 할 수 있습니다 :

#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
length=${#AR[@]}
for (( i = 0; i < length; i++ )); do
  echo "$i"
done

산출:

0
1
2
3