Почему это не работает?
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
Как мне это сделать правильно?
Проблема с вашим скриптом в том, что 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
Дополнительная литература:
Вы можете просто изменить свой сценарий, чтобы он читался так:
NODE_ROOT=node0
INFRA_DOMAIN=example.com
for n in {1..3}; do echo ${NODE_ROOT}${n}.${INFRA_DOMAIN}; done