Передайте env var в makefile как необязательный - PullRequest
0 голосов
/ 24 августа 2018

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

test:
 ./script.sh

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

./script.sh -n 10

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

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

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

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

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

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

1 Ответ

0 голосов
/ 24 августа 2018

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

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

./script.sh  

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

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

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

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