Shell

為什麼會變磷一個_H一個_Fectchildshells,butchang_我__磷一種噸H一種FF和C噸CH一世ldsH和lls,b在噸CH一種nG一世nGPATH affect child shells, but changing富不?

  • July 23, 2016
$ unset foo
$ unset bar
$ echo $foo

$ echo $bar

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ foo=a
$ bar=b
$ export bar
$ echo $foo
a
$ echo $bar
b
$ PATH=
$ echo $PATH

$ /bin/bash
bash: lesspipe: No such file or directory
bash: dircolors: No such file or directory
bash: ls: No such file or directory
$ echo $foo

$ echo $bar
b
$ echo $PATH

$

正如我們所看到的,更改$PATH會影響子shell,而需要export編輯另一個變數。為什麼?

實際上有兩種類型的變數:

  1. 環境變數
  2. 外殼變數

為了讓事情變得更複雜,它們看起來都一樣,並且可以使用export命令將 shell 變數轉換為環境變數。

env命令將顯示目前的環境變數集。

$ myvar=100
$ env | grep myvar
$ export myvar
$ env | grep myvar
myvar=100

變數也可以在命令的生命週期內臨時導出。

$ env | grep anothervar
$ anothervar=100 env | grep anothervar
anothervar=100
$ env | grep anothervar
$ 

當 shell 啟動時,它會繼承許多環境變數(可能為零)。

啟動腳本(例如.bash_profile.bashrc目錄中的/etc文件)也可以設置和導出變數。

最後,如果環境為空,shell 本身可以為環境變數設置一個預設編號。例如

$ PATH=foo /bin/bash -c 'echo $PATH'
foo
$ PATH= /bin/bash -c 'echo $PATH'

$ unset PATH
$ /bin/bash -c 'echo $PATH'
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:.

引用自:https://unix.stackexchange.com/questions/297617