2015-11-28 7 views
0

Я хочу иметь функцию в bash, которая создает словарь как локальную переменную. Заполните словарь одним элементом, а затем верните этот словарь в качестве вывода.Возврат словаря из функции Bash

Правильный ли приведенный ниже код?

function Dictionary_Builder() 
{ 
local The_Dictionary 
unset The_Dictionary 
declare -A The_Dictionary 
The_Dictionary+=(["A_Key"]="A_Word") 
return $The_Dictionary 
} 

Как получить доступ к выходу функции выше? Могу ли я использовать следующую команду в bash?

The_Output_Dictionary=Dictionary_Builder() 

ответ

0

Для захвата вывода команды или функции, использовать команду подстановки:

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 
+0

Я понял этот код, ожидаю, что причина использования двойных кавычек в 4-й и 6-й строках – Admia

+0

@Mahdi: попробуйте удалить первую пару двойных кавычек: вы получите синтаксическую ошибку (unquoted '('). Вторая пара может не понадобиться в этом случае, но это не повредит. – choroba

+0

Я определяю функцию, основанную на вашем коде. Однако при выполнении сценария я получаю следующую ошибку. ./test.sh: строка 4: синтаксическая ошибка около неожиданного токена '(' ./test.sh: строка 4:' declare -A The_Dictionary = ([Key1] = Word1)' – Admia