Вы используете bash -specifi c функции. Make не запускает пользовательскую оболочку, она всегда использует /bin/sh
по умолчанию. В некоторых системах /bin/sh
- это ссылка на /bin/bash
, и ваш make-файл будет работать. В других системах /bin/sh
является ссылкой на оболочку POSIX, например dash
.
POSIX не разрешает [[ ... ]]
, он использует только [ ... ]
. Кроме того, в тесте POSIX равенство равно =
, а не ==
. Только bash допускает ==
в качестве расширения.
Итак, если вы хотите, чтобы ваша команда была POSIX-совместимой, она должна быть:
test :
foo() { if [ "a" = "a" ]; then echo $$1; fi; }; foo "hello"