Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从bash脚本中的带引号的字符串中获取环境变量?_Bash_Shell_Gitlab Ci - Fatal编程技术网

如何从bash脚本中的带引号的字符串中获取环境变量?

如何从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

我正在使用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 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