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