Невозможно использовать переменную окружения Array

Я не знаю, почему я не могу использовать переменную env array внутри скрипта?
В моем ~/.bashrc или ~/.profile

 export HELLO="ee" export HELLOO=(aaa bbbb ccc) 

в оболочке:

 > echo $HELLO ee > echo $HELLOO aaa > echo ${HELLOO[@]} aaa bbbb ccc 

в скрипте:

 #!/usr/bin/env bash echo $HELLO echo $HELLOO echo ${HELLOO[@]} --- # Return ee 

Зачем ?

2 Solutions collect form web for “Невозможно использовать переменную окружения Array”

bash массив не может быть переменной среды, поскольку переменные среды могут быть только парами ключ-значение.

Вы можете сделать так, как это делает оболочка с $PATH , которая по существу представляет собой массив путей; превратите массив в строку, ограниченную каким-то конкретным символом, который иначе не присутствует в значениях массива:

 $ arr=( aa bb cc "some string" ) $ arr=$( printf '%s:' "${arr[@]}" ) $ echo $arr aa:bb:cc:some string: 

Затем удалите последний символ и экспортируйте его:

 $ arr=${arr%:} $ export arr 

Альтернативой передаче значений сценарию с использованием переменных среды является (очевидно?) Использование аргументов командной строки:

 arr=( aa bb cc ) ./some_script "${arr[@]}" 

Затем скрипт будет обращаться к переданным аргументам один за другим, используя позиционные параметры $1 , $2 , $3 т. Д. Или используя $@ :

 printf 'First I got "%s"\n' "$1" printf 'Then I got "%s"\n' "$2" printf 'Lastly there there was "%s"\n' "$3" for opt in "$@"; do printf 'I have "%s"\n' "$opt" done 

Массивы специфичны для bash. Переменные среды представляют собой пары имя-значение.

Прочтите спецификации переменных среды , в которых, в частности, говорится:

Значение переменной среды – это строка символов. Для C-языковой программы массив строк, называемый средой, должен быть доступен, когда процесс начинается. Массив указывается внешней переменной environ , которая определяется как:

 extern char **environ; 

Эти строки имеют форму name = value ; имена не должны содержать символ '='.

  • Приоритет логических операторов оболочки &&, ||
  • Две трубы для одной команды
  • Почему я не могу переписать файл с обработанным значением?
  • Чтение вывода в `screen` извне
  • Программно извлекать частные IP-адреса (ы)
  • Закрытие дескриптора файла,> & - vs <& -
  • Как перечислять только имена файлов одного и того же типа в каталоге?
  • Команда ls: что означает первая строка?
  • Как удалить файл с именем -help с командной строки bash?
  • Могу ли я увеличить яркость текста в оболочке Arch?
  • Wacom Linux xsetwacom Прикрепить сценарий оболочки к кнопкам
  • Interesting Posts

    syntax_highlight <исходный_файл> | LPR

    HTTP-прокси в OpenBSD 5.8 (замена Apache ProxyPass)

    Как сохранить консольный ввод в mplayer при чтении из stdin?

    Как избежать рекурсивного обхода каталога для синхронизации двух каталогов?

    Могу ли я откатиться от обновления apt-get, если что-то пойдет не так?

    Я случайно GZIPed целую кучу файлов, один за другим, вместо использования tar (1). Как я могу отменить этот беспорядок?

    Скопировать файлы в новый каталог, только если имя файла находится в массиве

    Компиляция редактора Nano с параметрами

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

    Что такое синтаксический анализ?

    Блокирование или пересылка пакетов в качестве точки доступа

    rkhunter предупреждает о доступе root ssh, когда этот доступ не разрешен в системе

    Выберете () возврат до следующего jiffy, если вы будете ждать с высоким разрешением timerfd?

    Альтернатива применению клавиатуры gnome от Fedora

    Программа Unix для генератора случайных изображений

    Linux и Unix - лучшая ОС в мире.