【问题标题】:How can I get an environment variable from a quoted string in bash script? [duplicate]如何从 bash 脚本中的引用字符串中获取环境变量? [复制]
【发布时间】:2020-10-13 04:33:10
【问题描述】:

我正在使用 gitlab-ci 并且我想将我的工件与之前阶段导出的指定 VERSION 打包在一起,但是版本值的密钥是使用 CI_COMMIT_SHORT_SHA 生成的,我像这样导出它:

export COMMIT_${CI_COMMIT_SHORT_SHA}_VERSION=${VERSION}

但我不能像这样使用它

echo ${COMMIT_${CI_COMMIT_SHORT_SHA}_VERSION}

or

 `echo '$COMMIT_'"${CI_COMMIT_SHORT_SHA}"'_REVISION'`

有什么建议吗?

【问题讨论】:

标签: bash shell gitlab-ci


【解决方案1】:

希望以下示例对您有所帮助:

$ 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 : declare 是一个 bash 内置命令,允许您更新应用于 shell 范围内变量的属性。

参考:http://mywiki.wooledge.org/BashFAQ/006#Indirection

您需要:

$ 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 -n!
猜你喜欢
  • 2013-10-26
  • 1970-01-01
  • 1970-01-01
  • 2010-10-24
  • 2012-03-01
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多