답변:
배열 키 목록을 사용하여이 작업을 수행 할 수 있습니다 . 로부터 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
printf "$i=(${AR[i]})\n"
또는 echo "$i=(${ARi]})"
둘 다 key & var를 얻는 방법을 보여줌으로써 약간의 추가를 주지만 엄격히 말하면 echo "$i"
OP에 대답했을 것입니다. 나머지는 "bash fu"입니다 :)
당신은 이런 식으로 할 수 있습니다 :
#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
length=${#AR[@]}
for (( i = 0; i < length; i++ )); do
echo "$i"
done
산출:
0
1
2
3
"${array[*]}"
대신에 절대 원하지 않습니다"${array[@]}"
. 다소 사용*
하지 않고 사용@
하면 배열 대신 문자열로 처리됩니다.