GNU/Linux >> Linux Esercitazione >  >> Linux

Impossibile utilizzare un array come variabile di ambiente

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 '='.


Linux
  1. Suggerimenti e trucchi per le variabili di ambiente Linux

  2. Sostituzione delle variabili d'ambiente in sed

  3. Caratteri consentiti nei nomi delle variabili di ambiente Linux

  4. Come posso eliminare una variabile di ambiente esportata?

  5. Impossibile utilizzare VM clonato, OpenSUSE, VirtualBox

Come impostare la variabile d'ambiente in Windows

Come impostare le variabili d'ambiente in MacOS

Configura la connessione al database utilizzando la variabile di ambiente in Rails

Come impostare la variabile d'ambiente in Bash

I 20 motivi principali per utilizzare l'ambiente desktop KDE

10 motivi per utilizzare Pantheon come ambiente desktop