Qual è la differenza tra set, env, declare ed export quando si imposta una variabile in una shell Linux?


17

Qual è la differenza tra set, env, declaree exportquando si imposta una variabile in un guscio di Linux, come ad esempio bash?


1
Perché questa domanda è stata annullata?
20

Risposte:


5

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 ~#

declaree sete env? esportazione vs dichiarazione?
Pacerier

Devo sottovalutare questo perché semplicemente non risponde alla domanda.
Daniel C. Sobral,

Fammi sapere se è meglio.
Shawn P.

1

Innanzitutto, devi capirlo environment variablese shell variablesnon 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.

  1. 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 -iflag
  2. set: senza opzioni, il nome e il valore di ciascuna variabile della shell vengono visualizzati * ~ dall'esecuzione man setin rhel; può anche essere usato per impostare l' attributo shell . Questo comando NON imposta l' ambiente né la variabile shell .
  3. declare: senza alcuna opzione, uguale a env ; può anche essere usato per impostare la variabile shell
  4. export: crea variabili shell ambiente variabili d'ambiente

In breve:

  1. set non imposta variabili shell né ambiente
  2. env può impostare variabili di ambiente per un singolo comando
  3. declare imposta le variabili della shell
  4. export rende variabili di shell variabili d'ambiente

NOTA declare -x VAR=VAL crea la variabile shell e la esporta, rendendola variabile d'ambiente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.