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


12

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

# echo $BUILDNUMBER_

# echo $BUILDNUMBER
230

Ответы:


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держим.
Стефан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.