Bash 스크립트를 사용하여 키 값 쌍의 사전을 만들려고합니다. 이 논리를 사용하려고합니다.
declare -d dictionary
defaults write "$dictionary" key -string "$value"
... 어디에 $dictionary
변수가 있지만 작동하지 않습니다.
Bash 스크립트에서 키-값 쌍을 만드는 방법이 있습니까?
Bash 스크립트를 사용하여 키 값 쌍의 사전을 만들려고합니다. 이 논리를 사용하려고합니다.
declare -d dictionary
defaults write "$dictionary" key -string "$value"
... 어디에 $dictionary
변수가 있지만 작동하지 않습니다.
Bash 스크립트에서 키-값 쌍을 만드는 방법이 있습니까?
답변:
bash 버전 4에서 연관 배열이 도입되었습니다.
declare -A arr
arr["key1"]=val1
arr+=( ["key2"]=val2 ["key3"]=val3 )
이제 arr 배열에는 세 개의 키 값 쌍이 포함됩니다. Bash는 정렬이나 팝업 등으로 할 수있는 작업이 상당히 제한되어 있습니다.
for key in ${!arr[@]}; do
echo ${key} ${arr[${key}]}
done
모든 키 값을 반복하고이를 에코합니다.
참고 : Bash 4는 GPLv3 라이센스로 인해 Mac OS X와 함께 제공되지 않습니다. 다운로드하여 설치해야합니다. 자세한 내용은 여기 를 참조 하십시오.
간단한 구분자를 사용할 수 있다면 매우 간단한 oneliner는 다음과 같습니다.
for i in a,b c_s,d ; do
KEY=${i%,*};
VAL=${i#*,};
echo $KEY" XX "$VAL;
done
이로써 및 i
같은 문자 시퀀스로 채워집니다."a,b"
"c_s,d"
. 각각 공백으로 구분됩니다. 다음에는 매개 변수 대체 를 do
사용 하여 쉼표 앞 의 부분과 그 뒤 의 부분을 추출 합니다.,
b
변수에 공백이 포함되어 있으면 작동 합니까?
영구 키 / 값 저장소의 경우 https://github.com/damphat/kv-bashkv-bash
에서 사용할 수있는 키 / 값 데이터베이스의 순수 bash 구현 인을 사용할 수 있습니다.
용법
git clone https://github.com/damphat/kv-bash
source kv-bash/kv-bash
영구 변수를 만들어보십시오.
kvset myName xyz
kvset myEmail xyz@example.com
#read the varible
kvget myEmail
#you can also use in another script with $(kvget keyname)
echo $(kvget myEmail)
bash에서는
declare -A name_of_dictonary_variable
Bash는 그것이 사전이라는 것을 이해하도록합니다.
예를 들어 sounds
사전 을 만들고 싶다면
declare -A sounds
sounds[dog]="Bark"
sounds[wolf]="Howl"
어디에 dog
와 wolf
있는 "keys"
, 그리고 Bark
하고 Howl
있습니다 "values"
.
다음을 사용하여 모든 값에 액세스 할 수 있습니다. echo ${sounds[@]}
또는echo ${sounds[*]}
다음을 사용해야 만 모든 키에 액세스 할 수 있습니다. echo ${!sounds[@]}
특정 키에 대한 값을 원하는 경우 다음을 사용할 수 있습니다.
${sounds[dog]}
그러면 Bark
키 ( Dog
)에 대한 값 ( ) 이 제공됩니다 .
를 sh
지원하지 않는 이전 bash (또는 ) declare -A
에서는 다음 스타일을 사용하여 키 / 값을 에뮬레이션 할 수 있습니다.
# key
env=staging
# values
image_dev=gcr.io/abc/dev
image_staging=gcr.io/abc/stage
image_production=gcr.io/abc/stable
img_var_name=image_$env
# active_image=${!var_name}
active_image=$(eval "echo \$$img_var_name")
echo $active_image