如何从bash脚本中的带引号的字符串中获取环境变量?
我正在使用gitlab ci,我想用前面阶段导出的指定版本打包我的工件,但是版本值的键是用ci_COMMIT_SHORT_SHA生成的,我将其导出如下:如何从bash脚本中的带引号的字符串中获取环境变量?,bash,shell,gitlab-ci,Bash,Shell,Gitlab Ci,我正在使用gitlab ci,我想用前面阶段导出的指定版本打包我的工件,但是版本值的键是用ci_COMMIT_SHORT_SHA生成的,我将其导出如下: export COMMIT{CI\u COMMIT\u SHORT\u SHA}\u VERSION=${VERSION} 但我不能像这样使用它 echo${COMMIT\u${CI\u COMMIT\u SHORT\u SHA}\u VERSION} 或 `回显“$COMMIT”${CI_COMMIT_SHORT_SHA}”''u REVI
export COMMIT{CI\u COMMIT\u SHORT\u SHA}\u VERSION=${VERSION}
但我不能像这样使用它
echo${COMMIT\u${CI\u COMMIT\u SHORT\u SHA}\u VERSION}
或
`回显“$COMMIT”${CI_COMMIT_SHORT_SHA}”''u REVISION'`
有什么建议吗?希望下面的示例能帮助您:
$ foo=testvar
$ bar=testvalue
$ declare "someprefix_${foo}=${bar}"
# your variable
$ echo $someprefix_testvar
testvalue
# one way
$ eval echo '$'"someprefix_${foo}"
testvalue
# other way - prints the contents of the real variable
$ out="someprefix_${foo}"
$ echo ${!out}
testvalue
eval
:将参数作为shell命令执行
declare
:是一个bash内置命令,允许您更新应用于shell范围内变量的属性
参考:
您需要:
$ declare "COMMIT_${CI_COMMIT_SHORT_SHA}_VERSION=${VERSION}"
$ out="COMMIT_${CI_COMMIT_SHORT_SHA}_VERSION"
$ echo ${!out}
[akshay@db1 tmp]$ CI_COMMIT_SHORT_SHA=abcdef
[akshay@db1 tmp]$ VERSION=1.2.0
[akshay@db1 tmp]$ declare "COMMIT_${CI_COMMIT_SHORT_SHA}_VERSION=${VERSION}"
[akshay@db1 tmp]$ out="COMMIT_${CI_COMMIT_SHORT_SHA}_VERSION"
[akshay@db1 tmp]$ echo ${!out}
1.2.0
测试结果:
$ declare "COMMIT_${CI_COMMIT_SHORT_SHA}_VERSION=${VERSION}"
$ out="COMMIT_${CI_COMMIT_SHORT_SHA}_VERSION"
$ echo ${!out}
[akshay@db1 tmp]$ CI_COMMIT_SHORT_SHA=abcdef
[akshay@db1 tmp]$ VERSION=1.2.0
[akshay@db1 tmp]$ declare "COMMIT_${CI_COMMIT_SHORT_SHA}_VERSION=${VERSION}"
[akshay@db1 tmp]$ out="COMMIT_${CI_COMMIT_SHORT_SHA}_VERSION"
[akshay@db1 tmp]$ echo ${!out}
1.2.0
echo“COMMIT\u${CI\u COMMIT\u SHORT\u SHA}\u VERSION”
?@Cyrus将输出“COMMIT\u something\u VERSION”,但我想使用此字符串作为值键这是否回答了您的问题,特别是Flimm给出的答案。请参阅参考变量declare-n
!