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