0

考虑以下:

/ # 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

我在一个高山容器中运行,作为一种解决方法,我正在下载 bash 并使用它。但是想避免我的 docker 图像上的额外大小。

4

1 回答 1

3

这样做的唯一方法ash是使用eval. 但是,您应该验证您尝试评估的内容是否包含有效的 shell 标识符,以避免从不受信任的值执行意外代码。例如,

if echo "$string" | grep -q '^[a-zA-Z_][a-zA-Z0-9_]*$' "$string"; then
    eval echo \$$string
fi
于 2016-03-14T18:30:45.447 回答