Подстановка переменной Bash для переменной с последующим подчеркиванием

12

Переменная BUILDNUMBERустановлена ​​в значение 230. Я ожидаю, 230_что будет напечатан для команды, echo $BUILDNUMBER_но вывод пуст, как показано ниже.

# echo $BUILDNUMBER_

# echo $BUILDNUMBER
230
Talespin_Kit
источник

Ответы:

26

Команда echo $BUILDNUMBER_собирается напечатать значение переменной, $BUILDNUMBER_которое не установлено (подчеркивание является допустимым символом для имени переменной, как явно отмечено Джеффом Шаллером)

Вам просто нужно применить фигурные скобки (фигурные скобки) вокруг имени переменной или использовать самый жесткий printfинструмент:

echo "${BUILDNUMBER}_"
printf '%s_\n' "$BUILDNUMBER"

PS: всегда указывайте свои переменные.

Георгий Василиу
источник
В документации и стандарте термин «ноль» используется для переменной, для которой задана пустая строка (в отличие от неустановленной переменной). Я взял на себя смелость редактирования.
ilkkachu
8

Как уже объяснил Джордж Василиу , это потому, что вы печатаете переменную $BUILDNUMBER_вместо $BUILDNUMBER. Лучший способ получить то, что вы хотите, это использовать, ${BUILDNUMBER}_как объяснил Джордж. Вот еще несколько вариантов:

$ echo "$BUILDNUMBER"_
230_
$ echo $BUILDNUMBER"_"
230_
$ printf '%s_\n' "$BUILDNUMBER"
230_
Тердон
источник
Мы знаем, что хранит переменная, но мы не знаем, что $IFSдержит, поэтому echo $BUILDNUMBER"_"все еще не прав. Из этих трех только printf '%s_\n' "$BUILDNUMBER"правильно, если мы не знаем что $BUILDNUMBERили $IFSдержим.
Стефан