使用 ash 从字符串中获取环境变量
Get enviroment variable from string with ash
考虑以下几点:
/ # echo $TEMPLATEGO_SERVICE_HOST
192.168.1.1
/ # export string="TEMPLATEGO_SERVICE_HOST"
/ # echo $string
TEMPLATEGO_SERVICE_HOST
有了bash我可以做到:
/ echo ${!string}
192.168.1.1
如果我对 ash 进行同样的尝试,我会收到以下错误:
/ # echo ${!string}
ash: syntax error: bad substitution
我 运行 在一个 alpine 容器中,作为解决方法,我正在下载 bash 并使用它。但是我想避免在我的 docker 图片上增加额外的尺寸。
在 ash
中执行此操作的唯一方法是使用 eval
。但是,您应该验证您尝试评估的内容是否包含 仅 的有效 shell 标识符,以避免从不受信任的值执行意外代码。例如,
if echo "$string" | grep -q '^[a-zA-Z_][a-zA-Z0-9_]*$' "$string"; then
eval echo $$string
fi
考虑以下几点:
/ # echo $TEMPLATEGO_SERVICE_HOST
192.168.1.1
/ # export string="TEMPLATEGO_SERVICE_HOST"
/ # echo $string
TEMPLATEGO_SERVICE_HOST
有了bash我可以做到:
/ echo ${!string}
192.168.1.1
如果我对 ash 进行同样的尝试,我会收到以下错误:
/ # echo ${!string}
ash: syntax error: bad substitution
我 运行 在一个 alpine 容器中,作为解决方法,我正在下载 bash 并使用它。但是我想避免在我的 docker 图片上增加额外的尺寸。
在 ash
中执行此操作的唯一方法是使用 eval
。但是,您应该验证您尝试评估的内容是否包含 仅 的有效 shell 标识符,以避免从不受信任的值执行意外代码。例如,
if echo "$string" | grep -q '^[a-zA-Z_][a-zA-Z0-9_]*$' "$string"; then
eval echo $$string
fi