получить значение по умолчанию, если переменная не установлена в

(edit: вопрос более точный на основе обратной связи @Michael)

в bash, я часто использую расширения параметр: следующие команды печати "default value" когда $VARNAME не установлен, иначе он печатает содержимое VARNAME.

echo ${VARNAME:-default value}  #if VARNAME empty => print "default value" 
echo ${VARNAME-default value}   #if VARNAME empty => print "" (VARNAME string)

Я не нашел аналогичная функция на GNU make. Я, наконец, написал в своем Makefile:

VARNAME ?= "default value"
all:
        echo ${VARNAME}

но я не доволен этим решением: он всегда создает переменную VARNAME и это может Измените поведение некоторых файлов Makefile.

есть ли более простой способ получить значение по умолчанию для unset переменной?

3 ответов


Если вы хотите использовать расширение переменной GNU make, если она непустая, и значение по умолчанию, если она пуста, но не устанавливает переменную, вы можете сделать что-то вроде этого:

all:
        echo $(or $(VARNAME),default value)

Если вы хотите проверить, если переменная имеет непустое значение, вы можете использовать:

ifeq ($(VARNAME),)
        VARNAME="default value"
else
        do_something_else
endif

для проверки, определена ли переменная или нет, используйте ifdef.

смотрите синтаксис условных операторов в руководстве.


просто удалите двоеточие. Если вы используете :- в вашей подстановке будет использоваться значение по умолчанию, если переменная null, пустая строка или она не существует, а просто использует - самостоятельно заменит значение по умолчанию, только если переменная не была определена.

# var1=default
# var2=

# echo var2 is ${var2:-$var1}
var2 is something
# echo var3 is ${var3:-$var1}
var3 is something

# echo var2 is ${var2-$var1}
var2 is
# echo var3 is ${var3-$var1}
var3 is something