Передать env var в makefile как необязательный

iwostack спросил: 31 июля 2018 в 09:57 в: bash

У меня есть команда в make-файле, который выполняет скрипт bash:

test:
 ./script.sh

В скрипте реализованы getopts, поэтому его можно вызвать следующим образом:

./script.sh -n 10

что можно сделать в bash:

./script.sh ${n:+ -n\ "${n}"}

Но когда я поместил эту конструкцию в makefile, она выдает пустую строку.

test:
 ./script.sh  ${n:+ -n\ "${n}"}

И я не могу просто использовать ./scipt.sh $(n), поскольку мне нужен префикс -n.

Спасибо за любые предложения.

1 ответ

Есть решение
ネロク ответил: 31 июля 2018 в 10:10

$ имеет особое значение в make-файле, поскольку он используется для make ссылок на переменные.

Часть ${n:+ -n\ "${n}"} в вашем рецепте команда расширяется на make (а не bash), что приводит к пустой строке, и вот что получает bash:

./script.sh  

Однако вы можете экранировать $, добавив перед ним $:

test:
 ./script.sh  $${n:+ -n\ "$${n}"} 

Таким образом, bash получит следующую команду для выполнения:

./script.sh  ${n:+ -n\ "${n}"}