Uma matriz bash
não pode ser uma variável de ambiente, pois as variáveis de ambiente podem ser apenas pares de sequências de valores-chave.
Você pode fazer o que o shell faz com sua variável $PATH
, que essencialmente é uma matriz de caminhos; transforma a matriz em uma string, delimitada por algum caractere específico que não esteja presente nos valores da matriz:
$ arr=( aa bb cc "some string" )
$ arr=$( printf '%s:' "${arr[@]}" )
$ printf '%s\n' "$arr"
aa:bb:cc:some string:
Ou mais puro,
arr=( aa bb cc "some string" )
arr=$( IFS=:; printf '%s' "${arr[*]}" )
export arr
A expansão de ${arr[*]}
será os elementos da matriz arr
separados pelo primeiro caractere de IFS
, aqui definido como :
. Note que, se o fizer desta forma, os elementos da string serão separados (não delimitados ) por :
, o que significa que não seria capaz de distinguir uma elemento vazio no final, se houvesse um.
Uma alternativa para passar valores para um script usando variáveis de ambiente é (obviamente?) para usar os argumentos da linha de comando:
arr=( aa bb cc )
./some_script "${arr[@]}"
O script acessaria os argumentos transmitidos um por um usando os parâmetros posicionais $1
, $2
, $3
etc ou pelo uso de $@
:
printf 'First I got "%s"\n' "$1"
printf 'Then I got "%s"\n' "$2"
printf 'Lastly there was "%s"\n' "$3"
for opt in "$@"; do
printf 'I have "%s"\n' "$opt"
done