GNU/Linux >> Linux Esercitazione >  >> Linux

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

Bash sembra distinguere tra le variabili che sono state esportate e quelle che non lo sono state.

esempio:

$ FOO=BAR
$ env | grep FOO
$ set | grep FOO
FOO=BAR

set vede la variabile ma env no.

$ export BAR=FOO
$ env | grep FOO
BAR=FOO
$ set | grep FOO
BAR=FOO
FOO=BAR

set vede entrambe le variabili ma env vede solo la variabile esportata.

Conosco quel set è un builtin bash e env non lo è.

Quali sono le differenze tra le variabili esportate e quelle che non lo sono?

Risposta accettata:

Le variabili esportate vengono trasferite nell'ambiente dei comandi eseguiti dalla shell che le ha esportate, mentre le variabili non esportate sono locali rispetto alla chiamata della shell corrente. Da export pagina man:

La shell darà l'attributo export alle variabili corrispondenti ai nomi specificati, il che farà sì che si trovino nell'ambiente dei comandi eseguiti successivamente.

set restituisce l'ambiente corrente, che include tutte le variabili locali non esportate. env viene utilizzato per avviare programmi in un nuovo ambiente e senza argomenti produrrà quale sarebbe il nuovo ambiente. Da env sta creando un nuovo ambiente, vengono portate solo le variabili esportate, come nel caso di qualsiasi programma avviato da quella shell. Ad esempio, generando una seconda shell all'interno della prima (ho usato $$ per rappresentare i prompt nella shell interna):

$ FOO=BAR
$ bash
$$ echo $FOO             # Note the empty line

$$ exit
$ export FOO
$ bash
$$ echo $FOO
BAR
$$

Nota che è la variabile che viene esportata, non solo il suo valore. Ciò significa che una volta export FOO , FOO diventa una variabile globale e compare negli ambienti successivi, anche se modificata in seguito:

$ export FOO
$ FOO=BAR
$ bash
$$ echo $FOO
BAR
$$

Linux
  1. Differenza tra shell di accesso e shell non di accesso?

  2. La differenza tra un comando integrato e uno che non lo è?

  3. Differenza tra "e" sulla riga di comando (bash)??

  4. La differenza di utilizzo tra variabili Shell e variabili d'ambiente?

  5. Quali sono i parametri/variabili speciali della shell (bash)?

Differenza tra la definizione di variabili Bash con e senza esportazione

Qual è la differenza tra Login e Non-Login Shell

Differenza tra virgolette singole e doppie in Bash Shell

Qual è la differenza tra una console, un terminale e una shell?

Qual è la differenza tra #!/usr/bin/env bash e #!/usr/bin/bash?

Qual è la differenza tra &> e >&in bash?