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

为什么这不工作?

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 

我如何正确地做到这一点?

更换

 $NODE_ROOT{1..3}.$INFRA_DOMAIN 

通过

 ${NODE_ROOT}{1..3}.$INFRA_DOMAIN 

你的脚本的问题是Bash无法正确解释$NODE_ROOT{1..3} 。 为了提供帮助,你需要把variables放在引号中, "在任何情况下都被认为是”好的做法“,你也可以使用"${VARIABLE}"types的语法来帮助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 

进一步阅读:

  • 堆栈溢出问题什么时候我们需要使用Bashvariables的花括号?

你可以简单地修改你的脚本来阅读:

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