반응형
Bash에서 관련 어레이를 통해 반복하는 방법
Bash 스크립트의 관련 배열을 기반으로 키와 값을 얻기 위해 해당 배열을 반복해야 합니다.
#!/bin/bash
declare -A array
array[foo]=bar
array[bar]=foo
사실 for-in 루프를 사용하면서 키를 얻는 방법을 잘 모르겠어요.
키는 느낌표를 사용하여 액세스합니다.${!array[@]}
, 이 값에는,${array[@]}
.
키/값 쌍에 대해 다음과 같이 반복할 수 있습니다.
for i in "${!array[@]}"
do
echo "key : $i"
echo "value: ${array[$i]}"
done
에서 변수 주위에 따옴표를 사용하는 것에 주의해 주세요.for
스테이트먼트(및 의 사용)@
대신*
) 이것은 키에 공백이 포함되어 있는 경우에 필요합니다.
다른 답변의 혼란은 질문에 키와 값 모두에 "foo"와 "bar"가 포함되어 있기 때문입니다.
다음 방법으로 키에 액세스할 수 있습니다.${!array[@]}
:
bash-4.0$ echo "${!array[@]}"
foo bar
그러면 키/값 쌍을 반복하는 것이 쉽습니다.
for i in "${!array[@]}"
do
echo "key :" $i
echo "value:" ${array[$i]}
done
이 고차 함수를 사용하여 파멸의 피라미드를 방지하십시오.
foreach(){
arr="$(declare -p $1)" ; eval "declare -A f="${arr#*=};
for i in ${!f[@]}; do $2 "$i" "${f[$i]}"; done
}
예:
$ bar(){ echo "$1 -> $2"; }
$ declare -A foo["flap"]="three four" foo["flop"]="one two"
$ foreach foo bar
flap -> three four
flop -> one two
연관 배열 2.0 입력에 오신 것을 환영합니다!
clear
echo "Welcome to input associative array 2.0! (Spaces in keys and values now supported)"
unset array
declare -A array
read -p 'Enter number for array size: ' num
for (( i=0; i < num; i++ ))
do
echo -n "(pair $(( $i+1 )))"
read -p ' Enter key: ' k
read -p ' Enter value: ' v
echo " "
array[$k]=$v
done
echo " "
echo "The keys are: " ${!array[@]}
echo "The values are: " ${array[@]}
echo " "
echo "Key <-> Value"
echo "-------------"
for i in "${!array[@]}"; do echo $i "<->" ${array[$i]}; done
echo " "
echo "Thanks for using input associative array 2.0!"
출력:
Welcome to input associative array 2.0! (Spaces in keys and values now supported)
Enter number for array size: 4
(pair 1) Enter key: Key Number 1
Enter value: Value#1
(pair 2) Enter key: Key Two
Enter value: Value2
(pair 3) Enter key: Key3
Enter value: Val3
(pair 4) Enter key: Key4
Enter value: Value4
The keys are: Key4 Key3 Key Number 1 Key Two
The values are: Value4 Val3 Value#1 Value2
Key <-> Value
-------------
Key4 <-> Value4
Key3 <-> Val3
Key Number 1 <-> Value#1
Key Two <-> Value2
Thanks for using input associative array 2.0!
입력 어소시에이션
(스페이스를 포함한 키 및 값은 지원되지 않습니다.)
clear
echo "Welcome to input associative array! (written by mO extraordinaire!)"
unset array
declare -A array
read -p 'Enter number for array size: ' num
for (( i=0; i < num; i++ ))
do
read -p 'Enter key and value separated by a space: ' k v
array[$k]=$v
done
echo " "
echo "The keys are: " ${!array[@]}
echo "The values are: " ${array[@]}
echo " "
echo "Key <-> Value"
echo "-------------"
for i in ${!array[@]}; do echo $i "<->" ${array[$i]}; done
echo " "
echo "Thanks for using input associative array!"
출력:
Welcome to input associative array! (written by mO extraordinaire!)
Enter number for array size: 10
Enter key and value separated by a space: a1 10
Enter key and value separated by a space: b2 20
Enter key and value separated by a space: c3 30
Enter key and value separated by a space: d4 40
Enter key and value separated by a space: e5 50
Enter key and value separated by a space: f6 60
Enter key and value separated by a space: g7 70
Enter key and value separated by a space: h8 80
Enter key and value separated by a space: i9 90
Enter key and value separated by a space: j10 100
The keys are: h8 a1 j10 g7 f6 e5 d4 c3 i9 b2
The values are: 80 10 100 70 60 50 40 30 90 20
Key <-> Value
-------------
h8 <-> 80
a1 <-> 10
j10 <-> 100
g7 <-> 70
f6 <-> 60
e5 <-> 50
d4 <-> 40
c3 <-> 30
i9 <-> 90
b2 <-> 20
Thanks for using input associative array!
declare -a arr
echo "-------------------------------------"
echo "Here another example with arr numeric"
echo "-------------------------------------"
arr=( 10 200 3000 40000 500000 60 700 8000 90000 100000 )
echo -e "\n Elements in arr are:\n ${arr[0]} \n ${arr[1]} \n ${arr[2]} \n ${arr[3]} \n ${arr[4]} \n ${arr[5]} \n ${arr[6]} \n ${arr[7]} \n ${arr[8]} \n ${arr[9]}"
echo -e " \n Total elements in arr are : ${arr[*]} \n"
echo -e " \n Total lenght of arr is : ${#arr[@]} \n"
for (( i=0; i<10; i++ ))
do echo "The value in position $i for arr is [ ${arr[i]} ]"
done
for (( j=0; j<10; j++ ))
do echo "The length in element $j is ${#arr[j]}"
done
for z in "${!arr[@]}"
do echo "The key ID is $z"
done
~
언급URL : https://stackoverflow.com/questions/3112687/how-to-iterate-over-associative-arrays-in-bash
반응형
'programing' 카테고리의 다른 글
"Windows Defender SmartScreen으로 인해 인식할 수 없는 앱이 시작되지 않았습니다"를 방지하는 방법 (0) | 2023.04.08 |
---|---|
가로 세로 비율을 유지하면서 이미지 크기를 자동 조정하는 방법 (0) | 2023.04.08 |
Bash 조건: 표현식 "및" 방법은?([! -z $VAR & -e $VAR ]의 경우) (0) | 2023.04.08 |
파라미터의 큰따옴표 이스케이프 (0) | 2023.04.08 |
무제한 Bash 이력 (0) | 2023.04.08 |