Я использую bash версии 4.2.37 в Ubuntu 12.10. Но начиная с Ubuntu 12.04 я не могу экспортировать массивы в bash ...
Это пример (введите эти строки в командной строке, это не скрипт):
export astr=(a "b c" d)
declare -p |grep astr
bash
echo ${astr[@]}
declare -p |grep astr
echo
ничего не выводит ...
declare -p |grep astr
тоже ничего не выводит ...
То, что я ищу, - это обходной путь, потому что, насколько я знаю, это считается известной ошибкой bash.
РЕДАКТИРОВАТЬ: между прочим, если возможно, обходной путь мог бы избежать создания файлов временного хранения для массива, поскольку я могу запускать один и тот же сценарий одновременно на разных оболочках.
Это не ошибка с ударом, существует только не любой безопасный способ поместить массив удара в среду.
Что касается обходных решений, который зависит от того, чего Вы пытаетесь достигнуть с экспортом массивов во-первых.
Одно возможное обходное решение, для некоторых случаев, должно вывести массив в файл и источник, что файл, где Вам нужен он.
astr=(a "b c" d)
declare -p astr > some_file
bash -c 'source ./some_file; printf "%s\n" "${astr[1]}"'
Другое обходное решение могло быть должно передать массив как аргументы следующей оболочке.
Подожди, подожди, подожди... Я знаю, что немного опоздал, но этот вопрос все еще актуален, когда мы ищем экспорт массивов в Google, поэтому мой обходной путь был следующим:
declare -a ASTR;
export ASTR=(`echo a b c`);
# Printing all elements content
echo "${ASTR[*]}";
# Printing a position
echo "${ASTR[2]}";
Он вернет c, как только первая позиция массива будет равна 0. Я надеюсь, что это поможет кому-то искать его.
С уважением