GNU/Linux >> Znalost Linux >  >> Linux

Rozdíl mezi proměnnými Shell, které se exportují, a těmi, které nejsou v Bash?

Zdá se, že Bash rozlišuje mezi proměnnými, které byly exportovány, a těmi, které ne.

příklad:

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

set vidí proměnnou ale env ne.

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

set vidí obě proměnné kromě env vidí pouze exportovanou proměnnou.

Tu set znám je vestavěný bash a env není.

Jaké jsou rozdíly mezi proměnnými, které jsou exportovány, a těmi, které nejsou?

Přijatá odpověď:

Exportované proměnné jsou přenášeny do prostředí příkazů prováděných shellem, který je exportoval, zatímco neexportované proměnné jsou lokální pro aktuální vyvolání shellu. Z export manuálová stránka:

Shell dá proměnným odpovídajícím zadaným jménům atribut export, což způsobí, že budou v prostředí následně prováděných příkazů.

set zobrazuje aktuální prostředí, které zahrnuje všechny lokální neexportované proměnné. env se používá ke spouštění programů v novém prostředí a bez argumentů vypíše, jaké by toto nové prostředí bylo. Od env vytváří nové prostředí, jsou přeneseny pouze exportované proměnné, jako je tomu v případě jakéhokoli programu spouštěného z tohoto shellu. Například vytvoření druhého shellu v rámci prvního (použil jsem $$ reprezentovat výzvy ve vnitřním shellu):

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

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

Všimněte si, že jde o proměnnou, která se exportuje, nejen o její hodnotu. To znamená, že jakmile export FOO , FOO se stane globální proměnnou a zobrazí se v následujících prostředích, i když se později změní:

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

Linux
  1. Jaký je rozdíl mezi nohoup a ampersand

  2. Jaký je rozdíl mezi prováděním skriptu Bash a jeho získáváním?

  3. Rozdíl mezi '{}' a {} v příkazu find?

  1. Rozdíl mezi přihlašovacím prostředím a nepřihlašovacím prostředím?

  2. Rozdíl mezi ‚A‘ na příkazovém řádku (bash)??

  3. Rozdíl mezi příkazy v bash skriptu a příkazy v terminálu

  1. Rozdíl v použití mezi proměnnými shellu a proměnnými prostředí?

  2. Jaké jsou speciální parametry/proměnné (bash) Shell?

  3. Linux – Jaký je rozdíl mezi `su -` a `su –login`?