Для захвата вывода команды или функции, использовать команду подстановки:
The_Output_Dictionary=$(Dictionary_Builder)
и вывода значения для возврата, т.е. заменить return
с echo
. Однако вы не можете легко вернуть структуру, но можете попробовать вернуть строку, которая объявляет ее (см. Ниже).
В функции не нужно использовать local
и unset
. declare
создает локальную переменную внутри функции, если не указано иначе -g
. Новая созданная переменная всегда пуста.
Для добавления одного элемента в пустой переменной, вы можете назначить его непосредственно, не +
не требуется:
The_Dictionary=([A_Key]=A_Word)
Другими словами
#!/bin/bash
Dictionary_Builder() {
declare -A The_Dictionary=([A_Key]=A_Word)
echo "([${!The_Dictionary[@]}]=${The_Dictionary[@]})"
}
declare -A The_Output_Dictionary="$(Dictionary_Builder)"
echo key: ${!The_Output_Dictionary[@]}
echo value: ${The_Output_Dictionary[@]}
Для нескольких ключей и значений, что вам нужно чтобы перебрать словарь:
Dictionary_Builder() {
declare -A The_Dictionary=([A_Key]=A_Word
[Second]=Third)
echo '('
for key in "${!The_Dictionary[@]}" ; do
echo "[$key]=${The_Dictionary[$key]}"
done
echo ')'
}
declare -A The_Output_Dictionary="$(Dictionary_Builder)"
for key in "${!The_Output_Dictionary[@]}" ; do
echo key: $key, value: ${The_Output_Dictionary[$key]}
done
Я понял этот код, ожидаю, что причина использования двойных кавычек в 4-й и 6-й строках – Admia
@Mahdi: попробуйте удалить первую пару двойных кавычек: вы получите синтаксическую ошибку (unquoted '('). Вторая пара может не понадобиться в этом случае, но это не повредит. – choroba
Я определяю функцию, основанную на вашем коде. Однако при выполнении сценария я получаю следующую ошибку. ./test.sh: строка 4: синтаксическая ошибка около неожиданного токена '(' ./test.sh: строка 4:' declare -A The_Dictionary = ([Key1] = Word1)' – Admia