Immagino tu provenga da uno sfondo di Windows. Quindi li confronterò (anch'io sono un po 'nuovo su Linux). Ho trovato la risposta dell'utente al mio commento, utile per capire le cose.
In Windows, una variabile può essere permanente o meno. Il termine Variabile d'ambiente include una variabile impostata nella shell cmd con il comando SET, così come quando la variabile è impostata all'interno della GUI di Windows, quindi impostata nel registro, e diventa visualizzabile in nuove finestre cmd. es. documentazione per il comando set in Windows https://technet.microsoft.com/en-us/library/bb490998.aspx "Visualizza, imposta o rimuove le variabili di ambiente. Utilizzato senza parametri, set visualizza le impostazioni di ambiente correnti." In Linux, set non mostra le variabili d'ambiente, mostra le variabili di shell che non chiama / fa riferimento come variabili d'ambiente. Inoltre, Linux non usa set per impostare le variabili (a parte i parametri posizionali e le opzioni di shell, che spiego come una nota alla fine), solo per visualizzarli e anche in questo caso solo per visualizzare le variabili di shell. Windows usa set per l'impostazione e la visualizzazione, ad esempio set a = 5, linux no.
In Linux, immagino che potresti creare uno script che imposta le variabili all'avvio, ad esempio /etc/profile
o /etc/.bashrc
ma altrimenti, non sono permanenti. Sono memorizzati nella RAM.
C'è una distinzione in Linux tra variabili di shell e variabili di ambiente. In Linux, le variabili di shell sono solo nella shell corrente e le variabili di ambiente sono in quella shell e in tutte le shell secondarie.
È possibile visualizzare le variabili di shell con il set
comando (anche se si noti che, a differenza di Windows, le variabili non sono impostate in Linux con il comando set).
set -o posix; set
(fare questo set -o posix una volta per primo, aiuta a non visualizzare troppe cose non necessarie). Quindi set
visualizza le variabili di shell.
È possibile visualizzare le variabili di ambiente con il env
comando
le variabili di shell sono impostate ad esempio con just a = 5
le variabili d'ambiente sono impostate con export, export imposta anche la variabile shell
Qui puoi vedere la variabile di shell zzz impostata con zzz = 5, e vedi che viene mostrata durante l'esecuzione set
ma non come variabile d'ambiente.
Qui vediamo yyy impostato con export, quindi è una variabile d'ambiente. E vedi che mostra sotto sia le variabili di shell che le variabili di ambiente
$ zzz=5
$ set | grep zzz
zzz=5
$ env | grep zzz
$ export yyy=5
$ set | grep yyy
yyy=5
$ env | grep yyy
yyy=5
$
altri thread utili
/unix/176001/how-can-i-list-all-shell-variables
/ubuntu/26318/environment-variable-vs-shell-variable-whats-the-difference
Nota- un punto che elabora un po 'ed è in qualche modo correttivo a quello che ho scritto, è che, in bash linux,' set 'può essere usato per impostare "parametri posizionali" e "opzioni / attributi della shell", e tecnicamente entrambi quelle sono variabili, sebbene le pagine man potrebbero non descriverle come tali. Ma ancora, come accennato, set non imposterà variabili di shell o variabili di ambiente). Se lo fai set asdf
, imposta $ 1 su asdf, e se lo fai echo $1
vedi asdf. Se fateset a=5
non imposterà la variabile a, uguale a 5. Imposterà il parametro posizionale $ 1 uguale alla stringa di "a = 5". Quindi se hai mai visto impostare a = 5 in Linux è probabilmente un errore a meno che qualcuno non volesse effettivamente quella stringa a = 5, in $ 1. L'altra cosa che il set di Linux può impostare sono le opzioni / attributi della shell. Se imposti -o ne vedrai un elenco. E puoi fare ad esempio set -o verbose
, off, per attivare verbose (btw il valore predefinito sembra essere disattivato ma questo non fa differenza in questo). Oppure puoi fare set +o verbose
per disattivare verbose. Windows non ha tale utilizzo per il suo comando set.