Как экспортировать массивы Bash? какие-нибудь обходные советы?

Я использую 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.

РЕДАКТИРОВАТЬ: между прочим, если возможно, обходной путь мог бы избежать создания файлов временного хранения для массива, поскольку я могу запускать один и тот же сценарий одновременно на разных оболочках.

3
задан 16 May 2013 в 05:32

2 ответа

Это не ошибка с ударом, существует только не любой безопасный способ поместить массив удара в среду.

Что касается обходных решений, который зависит от того, чего Вы пытаетесь достигнуть с экспортом массивов во-первых.

Одно возможное обходное решение, для некоторых случаев, должно вывести массив в файл и источник, что файл, где Вам нужен он.

astr=(a "b c" d)
declare -p astr > some_file

bash -c 'source ./some_file; printf "%s\n" "${astr[1]}"'

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

5
ответ дан 16 May 2013 в 05:32

Подожди, подожди, подожди... Я знаю, что немного опоздал, но этот вопрос все еще актуален, когда мы ищем экспорт массивов в Google, поэтому мой обходной путь был следующим:

declare -a ASTR;
export ASTR=(`echo a b c`);

# Printing all elements content
echo "${ASTR[*]}";
# Printing a position 
echo "${ASTR[2]}";

Он вернет c, как только первая позиция массива будет равна 0. Я надеюсь, что это поможет кому-то искать его.

С уважением

-1
ответ дан 5 May 2020 в 00:16

Другие вопросы по тегам:

Похожие вопросы: