簡體   English   中英

bash中導出環境變量時什么時候用括號?

[英]When to use brackets when exporting environment variables in bash?

我一直試圖弄清楚 bash 環境變量中括號的用途是什么。 例如,在下面的實際代碼示例中,為什么某些定義在PATH周圍使用{} ,例如export...=.../${PATH} 另請注意,有些定義是不同的:有些使用{$ECLIPSE_DIR}和括號內的$ 有些使用${PATH}和括號外的$ ,有些則完全省略括號。 這段代碼通常可以工作,盡管有時會顯示底部顯示的錯誤(它們似乎是暫時的),我不確定為什么這些錯誤有時只出現而不出現其他錯誤。

關於包含 bash 環境變量的方法的常見做法是什么,什么時候應該使用括號,將$放在括號內和括號外有什么區別? 另外,為什么有些行在變量名前有一個“ export ”,而有些則沒有? 這里有什么區別?

# ECLIPSE
ECLIPSE_DIR=$HOME/eclipse
PATH=${PATH}:{$ECLIPSE_DIR}

# ANT
ANT_HOME=/usr/bin/ant
PATH=${ANT_HOME}/bin:${PATH}
export ANT_HOME PATH

# GRADLE
export GRADLE_HOME=/usr/local/gradle
export PATH=$GRADLE_HOME/bin:$PATH</code>


-bash: export: `/usr/bin/ant/bin:/usr/local/bin:{/Users/me/eclipse}:/usr/bin/scala-2.9.0.1/bin:/usr/local/mysql/bin:/usr/local/bin:{/Users/me/eclipse}': not a valid identifier

大括號通常用於清楚起見,但實際用途是將文本與變量名分開。 說我有以下內容:

$ word="ello"
$ echo "h$word"
hello
$ echo "y$wordw" # bash tries to find the var wordw, and replaces with a blank
y
$ echo "y${word}w"
yellow

大多數標點符號(特別是 . 或 /)會自動分隔變量名。

echo "$word/$word.$word"
ello/ello.ello

查看您提出的錯誤, {$ECLIPSE_DIR}將變量展開,然后用文字打開和關閉大括號括起來。 我認為解決方案應該將其更改為${ECLIPSE_DIR}

針對export問題,導出用於使調用此腳本的 shell 可以訪問變量。 一旦腳本完成,腳本中設置的任何變量都不存在,除非它被導出。 因此,如果您希望在運行該腳本后更改PATH ,則必須在腳本結束之前調用export PATH

大括號與 bash 變量一起使用以消除變量之間的歧義。 例如,考慮一下:

VAR=this
echo $VAR_and_that
echo ${VAR}_and_that

第一個echo什么也不打印,因為bash認為您正在嘗試echo顯 var this_and_that當然不存在。 第二個echo顯沒有這個問題並輸出this_and_that ,因為 bash 知道由於大括號而擴展了 VAR 變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM