![](/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.