вложенные словари в bash - PullRequest
       5

вложенные словари в bash

0 голосов
/ 13 декабря 2018

Я видел, что можно создать dict, используя bash 4:

declare -A dict=( ["John"]="23" ["Jackie"]="21" )

Мой вопрос: можем ли мы назначить другой словарь в качестве значения?

Например, иметь такую ​​структуру, как:

declare -A dict=( ["John"]=["age"="23" "weight"="150"] ["Jackie"]=["age"="21" "weight"="140"] )

Который представлял бы такую ​​структуру, как:

John:
    age: 23
    weight: 150


Jackie:
    age: 21
    weight: 140

Я подумал использовать 2 словаря, однако я не знаю, является ли это лучшим способом для достижения вложенного dict в bash:

declare -A John=( ["age"]="23" ["weight"]="150" )
declare -A dict=( ["John"]=${John} )

В этом случае я не смог получить доступ к age или weight переменным.

Спасибо

1 Ответ

0 голосов
/ 14 декабря 2018

Althought Bash не поддерживает вложенные массивы, как другие комментируют, если ваша bash версия 4.3 или новее, declare имеет опцию -n для определения ссылки на имя переменной, которая работает как что-то вроде C указатель.
Тогда вы можете сказать:

declare -A John=( ["age"]="23" ["weight"]="150" )
declare -A Jackie=( ["age"]="21" ["weight"]="140" )
declare -a dict=("John" "Jackie")

for member in "${dict[@]}"; do
    echo "$member :"
    declare -n p="$member"  # now p is a reference to a variable "$member"
    for attr in "${!p[@]}"; do
        echo "    $attr : ${p[$attr]}"
    done
done

Вывод:

John :
    weight : 150
    age : 23
Jackie :
    weight : 140
    age : 21

Обратите внимание, что опция -n не является широко используемой функцией и имеет некоторые ограничения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...