Makefileは ``バックティックの代わりに$()を使用します。

Makefileは ``バックティックの代わりに$()を使用します。

$()Makefileでシェル拡張構文を正しくエスケープする方法は?

.PHONY: test
test:
        @if [ `find myDir -type f -not -name '*.openapi.yaml' | wc -l ` != 0 ]; then \
                echo "All files must end with '.openapi.yaml'";                           \
                find myDir -type f -not -name '*.openapi.yaml';                      \
                exit 42;                                                                  \
        fi

私がそれを修正しようとしたとき

@if [ $( find myDir -type f -not -name '*.openapi.yaml' | wc -l ) != 0 ]; then \

わかりました、

/bin/sh: line 0: [: !=: unary operator expected

エスケープしようとすると$同じ\$エラーが発生します。

答え1

以下を倍増する必要があります$

.PHONY: test test1 test2

test: test1 test2

test1:
    @echo test1; if [ $$(echo 0) == "0" ]; then echo true; else echo false; fi

test2:
    @echo test2; if [ $$(echo 0) == "1" ]; then echo true; else echo false; fi

例を実行してみてください。

$ make
test1
true
test2
false

関連情報