Есть ли способ создать пары ключ-значение в Bash script?
Я пытаюсь создать словарь пары значений ключа, используя Bash script. Я пытаюсь использовать эту логику:
declare -d dictionary
defaults write "$dictionary" key -string "$value"
... где $dictionary
- переменная, но это не работает.
Есть ли способ создать пары ключ-значение в Bash script?
Ответы
Ответ 1
В 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
Перевернет все значения клавиш и вышлет их.
Ответ 2
Если вы можете использовать простой разделитель, это очень простой 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
мы используем замену параметров для извлечения части перед запятой ,
и частью после нее.
Ответ 3
Для постоянного хранения ключей/значений вы можете использовать kv-bash
, чистую bash реализацию базы данных ключ/значение, доступную по адресу https://github.com/damphat/kv-bash
Использование
git clone https://github.com/damphat/kv-bash
source kv-bash/kv-bash
Попробуйте создать некоторые постоянные переменные
kvset myName xyz
kvset myEmail [email protected]
#read the varible
kvget myEmail
#you can also use in another script with $(kvget keyname)
echo $(kvget myEmail)