首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Makefile中回显环境变量?

如何在Makefile中回显环境变量?
EN

Stack Overflow用户
提问于 2022-01-27 07:02:18
回答 1查看 1.4K关注 0票数 -1

目标是打印环境变量GOPATH的值。

下面是bash的命令:

代码语言:javascript
复制
echo "$GOPATH"

给出输出:

代码语言:javascript
复制
OPATH

GitHub runner运行这个makefile目标:

代码语言:javascript
复制
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')

代码语言:javascript
复制
$ 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被认为是特殊的令牌?

编辑:

变动如下:

代码语言:javascript
复制
test: env
    go env GOPATH
    export GOPATH=$$(go env GOPATH)
    echo "$$GOPATH"
    go test -v -race -tags=unit -cover ./...

提供产出:

代码语言:javascript
复制
$ go env GOPATH
/home/vsts-agent/go
$ export GOPATH=$(go env GOPATH)
$ echo "$GOPATH"

$ go test -v -race -tags=unit -cover ./...
go: downloading ...
EN

回答 1

Stack Overflow用户

发布于 2022-01-27 07:40:52

我现在明白了。

您在这里不是一个bash外壳(正如您最初提出的问题)。

实际上,您正在执行Makefile中的命令。Make不运行shell,它对变量的处理与shell不同。

如果您想在Makefile中对变量GOPATH进行简单的扩展,可以编写$(GOPATH)$GOPATH试图扩展(不存在)变量G,并不是因为G是特殊的,而是因为Makefile语法就是这样工作的。

另外,export的含义也不一样。它实际上是定义要传递给子生成的变量。据我所知,你不是在用潜艇制造。

Makefile不是shell脚本。看上去你有很多书要读。

参考资料:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70874524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档