Описание тега tcp
Это в настоящее время не представляется возможным (насколько мне известно), чтобы иметь возможность строки и создать ассоциативный массив с ними в bash. Поэтому вы должны "оценить" перед использованием функции eval
заявление.
Когда я запускаю ваш пример, я получаю следующее используете bash версии 4.1.7:
$ ./Арр.Баш
./Арр.Баш: строка 5: Б: [а]=0: должны использовать индекс при назначении ассоциативный массив
./Арр.Баш: строка 5: Б: [Б]=1: необходимо использовать индекс при назначении ассоциативный массив
./Арр.Баш: строка 5: б: [с]=2: необходимо использовать индекс при назначении ассоциативный массив
./Арр.Баш: строка 5: б: [д]=3: необходимо использовать индекс при назначении ассоциативный массив
Изменение этой работы:
ивала "Б=($А)" # " или " B=($(эхо "$а"))
Повторный запуск вы сейчас получили ожидаемых результатов:
$ ./Арр.Баш
***********0 1 2 3*********
---------0 1 2 3----------
Объяснение
Я нашел это так вопрос и тему: Баш: как назначить ассоциативный массив на другое имя переменной (например, переименовать переменную)?, которая иллюстрирует способ, чтобы сделать это с помощью заявить,
но он идет, чтобы показать, как читается этот метод на самом деле является, и, вероятно, не следует использовать.
# объявляем ассоциативный массив
объявить-ассоциативного массива=(["ключ1"]="значение1" ["ключ2"]="значение2")
# преобразовать ассоциативный массив в строку
assoc_array_string=$(объявить -п ассоциативного массива)
# создать новый ассоциативный массив из String
ивала "заявляю-new_assoc_array="${assoc_array_string#*=}
# показать определении массива
объявить -п new_assoc_array
Этот метод показывает $ассоциативного массива
преобразуется в строку, а затем преобразовать обратно в массив, $new_assoc_array
. Но даже этот метод не может избежать необходимости использовать функцию eval
. Это сложный фрагмент следовать код и показывает, почему это действительно следует избегать.