100

Bash スクリプトを使用してキーと値のペアの辞書を作成しようとしています。私はこのロジックを使用しようとしています:

declare -d dictionary
defaults write "$dictionary" key -string "$value"

... where$dictionaryは変数ですが、これは機能していません。

Bash スクリプトでキーと値のペアを作成する方法はありますか?

4

6 に答える 6

182

bash バージョン 4 では、連想配列が導入されました。

declare -A arr

arr["key1"]=val1

arr+=( ["key2"]=val2 ["key3"]=val3 )

arr 配列には、3 つのキーと値のペアが含まれるようになりました。Bash でできることはかなり限られていますが、並べ替えやポップなどはできません。

for key in ${!arr[@]}; do
    echo ${key} ${arr[${key}]}
done

すべてのキー値をループしてエコーします。

注: Bash 4 は、GPLv3 ライセンスのため、Mac OS X には付属していません。ダウンロードしてインストールする必要があります。詳細については、こちらを参照してください

于 2013-01-17T01:54:08.247 に答える
40

シンプルな区切り文字を使用できる場合、非常にシンプルなワンライナーは次のとおりです。

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,

于 2014-05-16T14:28:57.573 に答える
3

永続的なキー/値ストレージの場合、 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)
于 2015-03-04T14:03:50.943 に答える
2
Using an example above this is what I did

#!/bin/sh
lookup_vht_index() {
for i in VHT20,0 VHT40,1 VHT80,2 VHT160,3 ; do
  KEY=${i%,*};
  VAL=${i#*,};
#  echo $KEY" XX "$VAL;
  [ "$1" = "$KEY" ] && echo $VAL
done
}

lookup_vht_name() {
for i in 0,VHT20 1,VHT40 2,VHT80 3,VHT160 ; do
  KEY=${i%,*};
  VAL=${i#*,};
#  echo $KEY" XX "$VAL;
  [ "$1" = "$KEY" ] && echo $VAL
done
}


echo "VHT20="$(lookup_vht_index "VHT20")
echo "2="$(lookup_vht_name 2)
于 2021-04-16T23:26:35.557 に答える