Заміна змінної Bash змінної з подальшим підкресленням


12

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

# echo $BUILDNUMBER_

# echo $BUILDNUMBER
230

Відповіді:


27

Команда echo $BUILDNUMBER_надрукує значення змінної, $BUILDNUMBER_яка не встановлена ​​(підкреслення - дійсний символ для імені змінної, як явно зазначив Джефф Шалер)

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

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

PS: Завжди цитуйте свої змінні.


1
Документація та стандарт використовують термін "null" для змінної, встановленої в порожній рядок (на відміну від невстановленої змінної). Я взяв на себе сміття редагувати.
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.