Un bash
matriz no puede ser una variable de entorno ya que las variables de entorno solo pueden ser pares de cadenas clave-valor.
Puede hacer lo que hace el shell con su $PATH
variable, que esencialmente es una matriz de rutas; convierta la matriz en una cadena, delimitada con algún carácter en particular que de otro modo no estaría presente en los valores de la matriz:
$ arr=( aa bb cc "some string" )
$ arr=$( printf '%s:' "${arr[@]}" )
$ printf '%s\n' "$arr"
aa:bb:cc:some string:
O más ordenado,
arr=( aa bb cc "some string" )
arr=$( IFS=:; printf '%s' "${arr[*]}" )
export arr
La expansión de ${arr[*]}
serán los elementos del arr
matriz separada por el primer carácter de IFS
, aquí establecido en :
. Tenga en cuenta que si lo hace de esta manera, los elementos de la cadena se separarán (no delimitado ) por :
, lo que significa que no podrá distinguir un elemento vacío al final, si lo hubiera.
Una alternativa a pasar valores a un script usando variables de entorno es (¿obviamente?) usar los argumentos de la línea de comando:
arr=( aa bb cc )
./some_script "${arr[@]}"
El script luego accedería a los argumentos pasados uno por uno usando los parámetros posicionales $1
, $2
, $3
etc, o mediante el uso de [email protected]
:
printf 'First I got "%s"\n' "$1"
printf 'Then I got "%s"\n' "$2"
printf 'Lastly there was "%s"\n' "$3"
for opt in "[email protected]"; do
printf 'I have "%s"\n' "$opt"
done
Las matrices son específicas de bash. Las variables de entorno son pares de nombre y valor.
Lea las especificaciones sobre las variables de entorno, que dice, en parte:
El valor de una variable de entorno es una cadena de caracteres. Para un programa en lenguaje C, una matriz de cadenas denominada entorno estará disponible cuando comience un proceso. La matriz es apuntada por la variable externa environ , que se define como:
extern char **environ;
Estas cadenas tienen la forma nombre=valor; nombres no debe contener el carácter '='.