Makefile环境变量中的美元

时间:2016-08-04 13:55:21

标签: bash shell makefile environment-variables

是否可以在Makefile中为某个部分“禁用”变量展开?

以下是我遇到的问题的一个例子:

print_command:
    @echo '$(COMMAND)'

这是我得到的输出:

$ export COMMAND='My favourite shell is $SHELL'
$ make print_command
My favourite shell is HELL
$ make print_command COMMAND='Welcome to $SHELL'
Welcome to HELL

我想得到什么:

$ export COMMAND='My favourite shell is $SHELL'
$ make print_command
My favourite shell is $SHELL
$ make print_command COMMAND='Welcome to $SHELL'
Welcome to $SHELL

是否可以在不使用双倍美元的情况下执行此操作:

$ export COMMAND='My favourite shell is $$SHELL'
$ make print_command
My favourite shell is $SHELL
$ make print_command COMMAND='Welcome to $$SHELL'
Welcome to $SHELL

以最简单的形式,我希望转发变量COMMAND的确切内容而不用make修改它。

1 个答案:

答案 0 :(得分:5)

添加$$双倍美元并双引号。

print_command:
                @echo "$$COMMAND"

像,

$ export COMMAND='My favourite shell is $SHELL'; make print_command
My favourite shell is $SHELL

GNU制作页面查看此How to Use Variables页面。

如果您只是添加单引号,make会打印出变量: - 例如与

print_command:
                @echo '$$COMMAND'
$ export COMMAND='My favourite shell is $SHELL'; make print_command
$COMMAND

因为$在Makefile中具有特殊含义,需要进行转义。如果您需要make扩展定义的变量的值,请使用value语法

print_command:
                @echo $(value COMMAND)
$ export COMMAND='My favourite shell is $SHELL'; make print_command
My favourite shell is /bin/bash

在上述情况下,环境变量的值被扩展为/bin/bash