这为什么不起作用?
NODE_ROOT=node0
INFRA_DOMAIN=example.com
for host in $NODE_ROOT{1..3}.$INFRA_DOMAIN; do echo $host; done
我期待着:
node01.example.com
node02.example.com
node03.example.com
然而,我得到:
.example.com
.example.com
.example.com
我该如何正确地做到这一点?
答案1
代替
$NODE_ROOT{1..3}.$INFRA_DOMAIN
经过
${NODE_ROOT}{1..3}.$INFRA_DOMAIN
答案2
您的脚本的问题是 Bash 无法$NODE_ROOT{1..3}
正确解释。为了解决这个问题,您需要将变量括在引号中,"
无论如何,这通常被认为是“良好做法”。您也可以使用"${VARIABLE}"
-type 语法来帮助 Bash。
例如,
NODE_ROOT=node0
INFRA_DOMAIN=example.com
for host in "$NODE_ROOT"{1..3}."$INFRA_DOMAIN"; do echo $host; done
或者
for host in "${NODE_ROOT}"{1..3}."$INFRA_DOMAIN"; do echo $host; done
进一步阅读:
- Stack Overflow 问题使用 Bash 时何时需要在变量中使用花括号?
答案3
您可以简单地修改脚本以使其如下所示:
NODE_ROOT=node0
INFRA_DOMAIN=example.com
for n in {1..3}; do echo ${NODE_ROOT}${n}.${INFRA_DOMAIN}; done