Path
第一個導出路徑不應該沒有 :$PATH
我注意到的是,當我將 a 添加
:$PATH
到 firstPATH
時,它會重複所有路徑echo
。我使用
MANPATH
例如,但同樣的事情發生在PATH
變數上。# I use MANPATH here export MANPATH="/usr/local/share/man" # Here no :$MANPATH export MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH" export MANPATH="/usr/local/opt/make/libexec/gnuman:$MANPATH"
這輸出:
$ echo $MANPATH /usr/local/opt/make/libexec/gnuman:/usr/local/opt/coreutils/libexec/gnuman:/usr/local/share/man
但是當我添加
:$MANPATH
到第一個時:export MANPATH="/usr/local/share/man:$MANPATH" export MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH" export MANPATH="/usr/local/opt/make/libexec/gnuman:$MANPATH"
這輸出:
$ echo $MANPATH /usr/local/opt/make/libexec/gnuman:/usr/local/opt/coreutils/libexec/gnuman:/usr/local/share/man:/usr/local/opt/make/libexec/gnuman:/usr/local/opt/coreutils/libexec/gnuman:/usr/local/share/man:
如您所見,所有的 MANPATH 都是重複的。
所以我的問題是:
- 我應該在第一行的末尾省略
:$PATH
or嗎?$MANPATH
- 為什麼當我將它添加到第一行的末尾時它會重複所有路徑?
如果,當你跑
export MANPATH="/usr/local/share/man:$MANPATH" export MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH" export MANPATH="/usr/local/opt/make/libexec/gnuman:$MANPATH"
你最終得到了存在的
MANPATH
內容/usr/local/opt/make/libexec/gnuman:/usr/local/opt/coreutils/libexec/gnuman:/usr/local/share/man:/usr/local/opt/make/libexec/gnuman:/usr/local/opt/coreutils/libexec/gnuman:/usr/local/share/man:
這意味著
MANPATH
已經包含/usr/local/opt/make/libexec/gnuman:/usr/local/opt/coreutils/libexec/gnuman:/usr/local/share/man:
在第一次分配之前(即您沒有從新/空變數開始)。
正如您所展示的,意思是“將目前擴展為’bar’
foo=bar:$foo
的字元串連接起來並將結果分配給”。如果您使用;開始一系列分配,則重置變數 如果你從.foo``foo``foo``foo=bar
foo``foo=bar:$foo
來到標題中提出的問題,您應該使用
foo=bar
(重置)還是foo=bar:$foo
(擴展)取決於上下文。通常,添加路徑的 shell 配置文件PATH
意味著每個使用者會話僅執行一次。他們可以做的更保守的選擇是擴展PATH
,因為其他程序在執行之前可能已經添加了有用的組件。如果一個shell腳本需要保證只擴展一個環境變數一次,無論執行多少次,都需要檢查該變數是否已經包含了要添加的組件。有關這方面的更多資訊,請參閱如何干淨地添加到 $PATH?