Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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_Variables - Fatal编程技术网

如何用字符串替换连接的bash变量?

如何用字符串替换连接的bash变量?,bash,variables,Bash,Variables,我正在尝试创建一个包含以下内容的文件myenv SENDER\u PASSWORD='my secret PASSWORD' BUILD_ENV=STAGING STAGING_SENDER_PASSWORD="my secret password" cat > myenv <<- EOL SENDER_PASSWORD='${${BUILD_ENV}_SENDER_PASSWORD}' EOL bash: SENDER_PASSWORD='${${BUILD_ENV}_S

我正在尝试创建一个包含以下内容的文件myenv
SENDER\u PASSWORD='my secret PASSWORD'

BUILD_ENV=STAGING
STAGING_SENDER_PASSWORD="my secret password"

cat > myenv <<- EOL
SENDER_PASSWORD='${${BUILD_ENV}_SENDER_PASSWORD}'
EOL

bash: SENDER_PASSWORD='${${BUILD_ENV}_SENDER_PASSWORD}'
: bad substitution
BUILD\u ENV=STAGING
STAGING\u SENDER\u PASSWORD=“我的秘密密码”
猫>迈因
有没有一种方法可以通过一个命令来实现这一点

eval
是你的敌人:

SENDER_PASSWORD=$(eval echo \${${BUILD_ENV}_SENDER_PASSWORD})
// or better, with quoting
SENDER_PASSWORD=$(eval echo "\"\${${BUILD_ENV}_SENDER_PASSWORD}\"")
使用bash间接变量展开更安全,但这将是两个表达式:

SENDER_PASSWORD=$(tmp=${BUILD_ENV}_SENDER_PASSWORD; printf "%s" "${!tmp}")
看看您的设计目标,我会将其包装在一个函数中(让我们使用api!)


非常感谢。我要用api的版本。
get_var() {
    local tmp
    tmp=${BUILD_ENV}_$1
    # ex. add if [ -z "${!tmp}" ]; then use some default value
    printf "%s\n" "${!tmp}"
}

SENDER_PASSWORD=$(get_var SENDER_PASSWORD)