Shell
為什麼會變磷一個_H一個_Fectchildshells,butchang_我__磷一種噸H一種FF和C噸CH一世ldsH和lls,b在噸CH一種nG一世nGPATH affect child shells, but changing富不?
$ 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
編輯另一個變數。為什麼?
實際上有兩種類型的變數:
- 環境變數
- 外殼變數
為了讓事情變得更複雜,它們看起來都一樣,並且可以使用
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:.