Невозможно использовать переменную окружения 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 ; имена не должны содержать символ '='.

  • xargs и <и> в те же файлы
  • В чем разница между eval и exec?
  • Что более идиоматично в сценарии bash: `|| true` или `|| : `?
  • / usr / bin / ls: / usr / bin / ls: невозможно выполнить двоичный файл
  • Является ли `var = value builtin` таким же, как` var = value; builtin`?
  • Какая труба будет работать для ввода случайных данных в скомпилированную программу для варианта 1 и варианта 2 одновременно?
  • Проверка значения переменных среды в Makefile
  • Почему не работает dzen2 при вызове через?
  • В чем разница между && и; при разрыве сна на фоне?
  • В zsh как я могу перечислить все переменные среды?
  • Как я могу определить вариант Unix / Linux из оболочки?
  • Interesting Posts

    Каков наилучший способ создания удаленного туннеля?

    Debian: Как задержать настройку при установке / обновлении?

    Программа не работает при вызове через символическую ссылку

    Почему люди называют Linux ядром, а не ОС?

    Ubuntu 14.04.1, 14.10 базовые дистрибутивы занимают 30 минут +, чтобы попасть в заставку экрана

    Устанавливается ImageMagick7-7.0.1.5 на FreeBSD 10.3, но после установки команды `import` нет

    Как включить Shift Lock? (Sticky shift key)

    Безопасно ли удалять неиспользуемые ядра Linux?

    Как суммировать номера совпадений

    Почему моя мышь с двойным прокруткой работает только так, как будто у нее одно колесо?

    Любая надежда на восстановление отсутствующего файла vms .swp?

    конфликт libssh2.so.1.0.1 в установке libssh2

    Debian + KVM: какую версию использовать? Стабильный или «новый»?

    Выполнить строки вывода команд в качестве другой команды в Linux

    Удаление файла, который не имеет никаких разрешений и атрибутов

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