Bash 循环和主机名以及如何生成它们

Bash 循环和主机名以及如何生成它们

这为什么不起作用?

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

进一步阅读:

答案3

您可以简单地修改脚本以使其如下所示:

NODE_ROOT=node0
INFRA_DOMAIN=example.com
for n in {1..3}; do echo ${NODE_ROOT}${n}.${INFRA_DOMAIN}; done

相关内容