Bash:如何将环境变量的值赋值给本地变量?替换错误求助
问题分析与解决
首先,你遇到的bash: 2.2.2: bad substitution错误是因为误用了间接变量扩展语法:
${!VAR}这个语法的作用是:先取VAR的值作为变量名,再获取这个变量名对应的内容。比如如果定义了NAME="BITBUCKET_TAG",那么${!NAME}才会返回BITBUCKET_TAG的值2.2.2。- 你直接写
${!BITBUCKET_TAG},bash会把BITBUCKET_TAG的值2.2.2当作变量名去查找,但变量名不能包含.,而且根本不存在名为2.2.2的变量,所以触发替换错误。
正确的赋值方法
你不需要用间接扩展,直接赋值即可。另外注意之前的命令里存在两个问题:
- 第一个命令里变量名拼错了(
BITBUxCKET_TAG多了个x),导致条件不成立; - 第二、第三个命令的
echo只在else分支执行,if条件成立时(变量存在)只会赋值varr,不会输出结果。
修正后的命令:
BITBUCKET_TAG=2.2.2 # 写法1:分支判断+全局输出 if [[ $BITBUCKET_TAG ]]; then varr=$BITBUCKET_TAG else varr="Nothing to see here" fi echo $varr # 写法2:更简洁的参数扩展语法 varr=${BITBUCKET_TAG:-"Nothing to see here"} echo $varr
各写法说明
varr=$BITBUCKET_TAG或varr="${BITBUCKET_TAG}":这两种都是直接把BITBUCKET_TAG的值赋值给varr,是最基础正确的写法,引号在值包含空格等特殊字符时更安全;${VAR:-默认值}:bash的参数扩展语法,当VAR为空或未定义时,使用默认值,否则取VAR的值,写法更简洁。
内容的提问来源于stack exchange,提问作者DaveB
相关产品推荐
相关产品推荐

