Qual è la differenza tra set
, env
, declare
e export
quando si imposta una variabile in un guscio di Linux, come ad esempio bash
?
Qual è la differenza tra set
, env
, declare
e export
quando si imposta una variabile in un guscio di Linux, come ad esempio bash
?
Risposte:
Sembra che set e dichiarazione siano leggermente diversi, con set più potente.
Vedi "dichiarare" sotto https://www.gnu.org/software/bash/manual/bash.html#Bash-Builtins dichiarare: "Dichiarare le variabili e dare loro degli attributi. Se non viene dato alcun nome, quindi visualizzare i valori delle variabili anziché.
Imposta "set" sotto https://www.gnu.org/software/bash/manual/bash.html#The-Set-Builtin * set: "Questo builtin è così complicato che merita una sua sezione. Set ti consente di modificare i valori delle opzioni della shell e impostare i parametri posizionali o per visualizzare i nomi e i valori delle variabili della shell. "
ENV è una variabile d'ambiente in Bash: https://www.gnu.org/software/bash/manual/bash.html#Bash-Variables env è un comando Linux. Penso che questo sia un buon riferimento: /unix/103467/what-is-env-command-doing
Ho pensato che fosse una buona spiegazione dell'esportazione: http://www.unix.com/302531838-post2.html
Inoltre: https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins * export (da Bourne): "Contrassegna ciascun nome da trasmettere ai processi figlio nell'ambiente".
Codice in prestito dall'URL sopra:
root@linux ~# x=5 <= here variable is set without export command
root@linux ~# echo $x
5
root@linux ~# bash <= subshell creation
root@linux ~# echo $x <= subshell doesnt know $x variable value
root@linux ~# exit <= exit from subshell
exit
root@linux ~# echo $x <= parent shell still knows $x variable
5
root@linux ~# export x=5 <= specify $x variable value using export command
root@linux ~# echo $x <= parent shell doesn't see any difference from the first declaration
5
root@linux ~# bash <= create subshell again
root@linux ~# echo $x <= now the subshell knows $x variable value
5
root@linux ~#
declare
e set
e env
? esportazione vs dichiarazione?
Innanzitutto, devi capirlo environment variables
e shell variables
non sono la stessa cosa.
Quindi, dovresti sapere che le shell hanno attributi che governano il modo in cui funziona. Questi attributi non sono variabili di ambiente né di shell.
Ora, per rispondere alla tua domanda.
env
: senza alcuna opzione, mostra corrente variabili di ambiente con i loro valori; Tuttavia, può essere utilizzato per impostare la variabile di ambiente per un singolo comando con il -i
flagset
: senza opzioni, il nome e il valore di ciascuna variabile della shell vengono visualizzati * ~ dall'esecuzione man set
in rhel; può anche essere usato per impostare l' attributo shell . Questo comando NON imposta l' ambiente né la variabile shell .declare
: senza alcuna opzione, uguale a env
; può anche essere usato per impostare la variabile shellexport
: crea variabili shell ambiente variabili d'ambienteIn breve:
set
non imposta variabili shell né ambienteenv
può impostare variabili di ambiente per un singolo comandodeclare
imposta le variabili della shellexport
rende variabili di shell variabili d'ambienteNOTA
declare -x VAR=VAL
crea la variabile shell e la esporta, rendendola variabile d'ambiente.