Un bash
array non può essere una variabile di ambiente in quanto le variabili di ambiente possono essere solo coppie di stringhe chiave-valore.
Puoi fare come fa la shell con il suo $PATH
variabile, che essenzialmente è un array di percorsi; trasforma l'array in una stringa, delimitata da qualche carattere particolare non altrimenti presente nei valori dell'array:
$ arr=( aa bb cc "some string" )
$ arr=$( printf '%s:' "${arr[@]}" )
$ printf '%s\n' "$arr"
aa:bb:cc:some string:
O più ordinato,
arr=( aa bb cc "some string" )
arr=$( IFS=:; printf '%s' "${arr[*]}" )
export arr
L'espansione di ${arr[*]}
saranno gli elementi del arr
array separato dal primo carattere di IFS
, qui impostato su :
. Nota che se lo fai in questo modo, gli elementi della stringa saranno separati (non delimitato ) di :
, il che significa che non saresti in grado di distinguere un elemento vuoto alla fine, se ce ne fosse uno.
Un'alternativa al passaggio di valori a uno script utilizzando le variabili di ambiente è (ovviamente?) Utilizzare gli argomenti della riga di comando:
arr=( aa bb cc )
./some_script "${arr[@]}"
Lo script quindi accederà agli argomenti passati uno per uno utilizzando i parametri posizionali $1
, $2
, $3
etc, o con l'uso di [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
Gli array sono specifici di bash. Le variabili d'ambiente sono coppie nome-valore.
Leggi le specifiche sulle variabili d'ambiente, che dicono, in parte:
Il valore di una variabile di ambiente è una stringa di caratteri. Per un programma in linguaggio C, un array di stringhe chiamato ambiente deve essere reso disponibile all'inizio di un processo. L'array è puntato dalla variabile esterna environ , che è definito come:
extern char **environ;
Queste stringhe hanno il formato nome=valore; nomi non deve contenere il carattere '='.