如何用字符串替换连接的bash变量?
我正在尝试创建一个包含以下内容的文件myenv如何用字符串替换连接的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
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)