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

Как мне это сделать правильно?

2
задан 28 February 2016 в 19:57
3 ответа

Заменить

$NODE_ROOT{1..3}.$INFRA_DOMAIN

на

${NODE_ROOT}{1..3}.$INFRA_DOMAIN
3
ответ дан 3 December 2019 в 09:15

Проблема с вашим скриптом в том, что 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
ответ дан 3 December 2019 в 09:15

Вы можете просто изменить свой сценарий, чтобы он читался так:

NODE_ROOT=node0
INFRA_DOMAIN=example.com
for n in {1..3}; do echo ${NODE_ROOT}${n}.${INFRA_DOMAIN}; done
0
ответ дан 3 December 2019 в 09:15

Теги

Похожие вопросы