GNU/Linux >> Linux Esercitazione >  >> Linux

bash:imposta la variabile env dell'array e il de-riferimento da qualsiasi script di shell fallisce

Leggi l'ottimo manuale, sezione "bug".

Le variabili array potrebbero non essere (ancora) esportate.

Tuttavia, non so che molti lo considerino un vero bug. Anche altre shell che supportano gli array in stile ksh non consentono l'esportazione.

Puoi passare le definizioni degli array piuttosto facilmente, attraverso parametri o variabili o l'ambiente. Di solito non è molto utile però.

function f {
    unset -v "$2"
    typeset "$2"
    eval "${!1}"
    typeset -p "$2"
}

typeset -a a=(a b c)
myArr=$(typeset -p a) f myArr a

L'equivoco sta nel pensare che le variabili d'ambiente siano usate solo dalle shell - non lo sono. Nessun attributo, inclusi readonly, integer e array, può essere esportato nel blocco dell'ambiente. Le variabili d'ambiente possono essere lette da qualsiasi linguaggio, C, C++, Perl, Java, Python, PHP e così via. Esistono anche su Windows.

Quindi, come potrebbe un'altra lingua supportare attributi specifici di Bash? Tutte le variabili d'ambiente vengono convertite in stringhe, tranne in Bash dove i valori dell'array non vengono affatto esportati.

La shell Korn esporterà solo il primo elemento. ksh93 esegue anche alcuni exec sfruttamento per preservare gli attributi delle variabili esportati nei figli della shell Korn.

A proposito, è considerato una cattiva pratica usare MAIUSCOLO per i nomi delle variabili, poiché potrebbero entrare in collisione con quelli usati dalla shell. Inoltre, su Bash 3, il nome STRING ha problemi quando viene esportato (risolto in Bash 4).


Linux
  1. Come impostare/creare variabili di ambiente e shell in Linux

  2. Script di shell con funzione e parametro come variabili?

  3. Copia e sovrascrivi un file nello script della shell

  4. Differenza tra i comandi nello script bash e i comandi nel terminale

  5. bash + leggi variabili e valori dal file tramite lo script bash

Variabili d'ambiente Linux:come leggere e impostare su un VPS Linux

Differenza tra variabili Shell che vengono esportate e quelle che non sono in Bash?

Come creare una matrice di elementi unici da una stringa/array in Bash?

Bash Beginner Series #2:Comprensione delle variabili nello scripting di Bash Shell

Esercitazione sulle variabili Bash:6 esempi pratici di variabili globali e locali Bash

bash - restituisce l'array dalla funzione e visualizza il contenuto