development

배열을 반복하여 인덱스와 값을 모두 인쇄

big-blog 2020. 6. 7. 00:46
반응형

배열을 반복하여 인덱스와 값을 모두 인쇄


나는 이런 식으로하고 싶다 :

foo=( )
foo[0]="bar"
foo[35]="baz"
for((i=0;i<${#foo[@]};i++))
do
    echo "$i: ${foo[$i]}"
done
# Output:
# 0: bar
# 1: 

그런 다음 for를 사용하여 반복하려고했습니다.

foo=( )
foo[0]="bar"
foo[35]="baz"
for i in ${foo[@]}
do
    echo "?: $i"
done
# Output:
# ?: bar
# ?: naz

그러나 여기서는 색인 값을 모릅니다.

나는 당신이 뭔가를 할 수 있다는 것을 알고 있습니다

foo=( )
foo[0]="bar"
foo[35]="baz"
declare -p foo
# Output:
# declare -a foo='([0]="bar" [35]="baz")'

그러나 다른 방법으로는 할 수 없습니까?


"${!foo[@]}"( reference )가 있는 배열 키를 찾을 수 있습니다.

for i in "${!foo[@]}"; do 
  printf "%s\t%s\n" "$i" "${foo[$i]}"
done

$i, 요소 자체를 통해 액세스해야하는 동안 인덱스가 들어갑니다.${foo[$i]}


항상 반복 매개 변수를 사용할 수 있습니다.

        ITER=0
        for I in ${FOO[@]}
        do  
            echo ${I} ${ITER}
            ITER=$(expr $ITER + 1)
        done

INDEX=0
for i in $list; do 
    echo ${INDEX}_$i
    let INDEX=${INDEX}+1
done

users=("kamal" "jamal" "rahim" "karim" "sadia")
index=()
t=-1

for i in ${users[@]}; do
  t=$(( t + 1 ))
  if [ $t -eq 0 ]; then
    for j in ${!users[@]}; do
      index[$j]=$j
    done
  fi
  echo "${index[$t]} is $i"
done

bash 4에서는 연관 배열을 사용할 수 있습니다.

declare -A foo
foo[0]="bar"
foo[35]="baz"
for key in "${!foo[@]}"
do
    echo "key: $key, value: ${foo[$key]}"
done

# output
# $ key: 0, value bar.
# $ key: 35, value baz.

bash 3에서 이것은 작동합니다 (zsh에서도 작동합니다).

map=( )
map+=("0:bar")
map+=("35:baz")

for keyvalue in "${map[@]}" ; do
    key=${keyvalue%%:*}
    value=${keyvalue#*:}
    echo "key: $key, value $value."
done

참고 URL : https://stackoverflow.com/questions/6723426/looping-over-arrays-printing-both-index-and-value

반응형