Heim >Backend-Entwicklung >Golang >Wie entkomme ich der Ausdrucksinterpolation in Makefiles, um Befehle korrekt auszuführen?

Wie entkomme ich der Ausdrucksinterpolation in Makefiles, um Befehle korrekt auszuführen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-25 03:27:11546Durchsuche

How Do I Escape Expression Interpolation in Makefiles to Execute Commands Correctly?

Ausdrucksinterpolation in Makefiles umgehen

Beim Schreiben von Makefiles möchte man häufig Befehle ausführen, die Ausdrücke enthalten. Ein häufiges Beispiel hierfür sind Tests, bei denen Sie Tests möglicherweise selektiv auf der Grundlage bestimmter Kriterien ausführen möchten.

Angenommen, Sie arbeiten an einem Go-Projekt und möchten Tests aus dem Anbieterverzeichnis ausschließen. Sie können dies ganz einfach in der Befehlszeile tun, indem Sie Folgendes verwenden:

$ go test $(go list ./... | grep -v /vendor/)

Wenn Sie jedoch versuchen, dies in ein Makefile zu integrieren:

test:
    go test $(go list ./... | grep -v /vendor/)

.PHONY: test

Sie werden feststellen, dass der Ausdruck nicht so ist interpoliert:

$ make
go test
?       github.com/m90/some-repo    [no test files]

Um dieses Problem zu beheben, müssen Sie das „$“-Zeichen im Ausdruck mit einem zweiten Escapezeichen versehen „$“:

test:
    go test $$(go list ./... | grep -v /vendor/)

.PHONY: test

Durch das Escapezeichen „$“ weisen Sie das Makefile an, den Ausdruck als auszuführenden Literalbefehl zu interpretieren, anstatt zu versuchen, die Variable zu ersetzen.

Das obige ist der detaillierte Inhalt vonWie entkomme ich der Ausdrucksinterpolation in Makefiles, um Befehle korrekt auszuführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn