해시 맵(hash map) 또는 사전(dictionary), 연관 배열(associative array) 형태의 변수를 사용하는 것에 있어서 shell의 종류나 버전마다 기능에 큰 차이가 존재한다.
가장 많이 사용하는 bash 5와 zsh 5를 기준으로 설명하겠다.
bash
선언
declare -A my_dict
정의
my_dict["hello"]="world"
my_dict["java"]="coffee"
my_dict[1]=3
선언과 정의를 한번에
declare -A my_dict=(["hello"]="world" ["java"]="coffee" [1]=3)
키 리스트 얻기
echo "${!my_dict[@]}"
for key in "${!my_dict[@]}"; do echo "$key"; done
@ 기호는 all을 의미한다.
! 기호를 변수명 앞에 붙여야 키 리스트를 얻을 수 있다.
값 리스트 얻기
echo ${my_dict[@]}
for value in "${my_dict[@]}"; do echo "$value"; done
! 기호가 없으면 값 리스트를 받을 수 있다.
키로부터 값 얻기
echo "${my_dict[hello]}"
echo "${my_dict[1]}"
zsh
선언
declare -A my_dict
정의
my_dict["hello"]="world"
my_dict["java"]="coffee"
my_dict[1]=3
선언과 정의를 한번에
declare -A my_dict=(["hello"]="world" ["java"]="coffee" [1]=3)
키 리스트 얻기
echo ${(k)my_dict}
for key in ${(k)my_dict}; do echo "$key"; done
변수명 앞에 (k)를 붙인다.
값 리스트 얻기
echo ${(v)my_dict}
for value in ${(v)my_dict}; do echo "$value"; done
변수명 앞에 (v)를 붙인다.
키와 값 리스트 얻기
echo ${(kv)my_dict}
for item in ${(kv)my_dict}; do echo "$item"; done
변수명 앞에 (kv)를 붙인다.
키로부터 값 얻기
echo "$my_dict[hello]"
echo "$my_dict[1]"