![](/img/trans.png)
[英]when exporting environment variables with spaces in value using lastpass bash script, receiving `not a valid identifier`
[英]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.