目标是打印环境变量GOPATH的值。
下面是bash的命令:
echo "$GOPATH"给出输出:
OPATHGitHub runner运行这个makefile目标:
test:
bash --version
go env GOPATH
export GOPATH=$(go env GOPATH)
echo "$GOPATH"
go test -v -race -tags=unit -cover ./...下面是GitHub运行程序中使用的bash版本和管道输出(版本:'2.286.1')
$ bash --version
GNU bash, version 4.4.20(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$ go env GOPATH
/home/vsts-agent/go
$ export GOPATH=
$ echo "OPATH"
OPATH
$ go test -v -race -tags=unit -cover ./...
go: downloading ...为什么$G被认为是特殊的令牌?
编辑:
变动如下:
test: env
go env GOPATH
export GOPATH=$$(go env GOPATH)
echo "$$GOPATH"
go test -v -race -tags=unit -cover ./...提供产出:
$ go env GOPATH
/home/vsts-agent/go
$ export GOPATH=$(go env GOPATH)
$ echo "$GOPATH"
$ go test -v -race -tags=unit -cover ./...
go: downloading ...发布于 2022-01-27 07:40:52
我现在明白了。
您在这里不是一个bash外壳(正如您最初提出的问题)。
实际上,您正在执行Makefile中的命令。Make不运行shell,它对变量的处理与shell不同。
如果您想在Makefile中对变量GOPATH进行简单的扩展,可以编写$(GOPATH)。$GOPATH试图扩展(不存在)变量G,并不是因为G是特殊的,而是因为Makefile语法就是这样工作的。
另外,export的含义也不一样。它实际上是定义要传递给子生成的变量。据我所知,你不是在用潜艇制造。
Makefile不是shell脚本。看上去你有很多书要读。
参考资料:
https://stackoverflow.com/questions/70874524
复制相似问题