环境变量在命令内不起作用

时间:2016-02-10 13:12:55

标签: bash shell environment-variables

我在这个奇怪的问题上被困在了家里。 我有一个执行以下操作的bashscript:

TEST="12.x.x.x"

echo ${TEST}给了我12.x.x.x

所以现在我想在我的命令中使用这个env var:

oadm ca create-server-cert --signer-cert=ca.crt \
    --signer-key=ca.key --signer-serial=ca.serial.txt \
    --hostnames='docker-registry.default.svc.cluster.local,$TEST' \
    --cert=registry.crt --key=registry.key

此命令的echo显示其中$ TEST的内容。 但命令失败(它没有为我的IP创建crt和密钥)。 但是当我刚刚执行时它会起作用:

oadm ca create-server-cert --signer-cert=ca.crt \
    --signer-key=ca.key --signer-serial=ca.serial.txt \
    --hostnames='docker-registry.default.svc.cluster.local,12.x.x.x' \
    --cert=registry.crt --key=registry.key

可能是什么问题? $ TEST的回声总是给我的IP。在命令之前和之后。

2 个答案:

答案 0 :(得分:2)

单引号可防止变量扩展。尝试使用双引号:

oadm ca create-server-cert --signer-cert=ca.crt \
    --signer-key=ca.key --signer-serial=ca.serial.txt \
    --hostnames="docker-registry.default.svc.cluster.local,${TEST}" \
    --cert=registry.crt --key=registry.key

答案 1 :(得分:0)

变量在单引号''之间无效,你应该使用双引号“”,如下所示:

--hostnames="docker-registry.default.svc.cluster.local,$TEST"