Makefile环境变量中的美元

Jac*_*don 3 bash shell makefile environment-variables

是否可以在Makefile特定部分中“禁用”我的变量扩展?

这是我遇到的问题的一个示例:

print_command:
    @echo '$(COMMAND)'
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

$ 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
Run Code Online (Sandbox Code Playgroud)

我想得到的是:

$ 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
Run Code Online (Sandbox Code Playgroud)

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

$ 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
Run Code Online (Sandbox Code Playgroud)

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

Ini*_*ian 5

添加一个$$双美元并双引号。

print_command:
                @echo "$$COMMAND"
Run Code Online (Sandbox Code Playgroud)

喜欢,

$ export COMMAND='My favourite shell is $SHELL'; make print_command
My favourite shell is $SHELL
Run Code Online (Sandbox Code Playgroud)

How to Use VariablesGNU制作页面签出此页面。

如果仅添加单引号,make则按字面输出变量:-例如,使用

print_command:
                @echo '$$COMMAND'
$ export COMMAND='My favourite shell is $SHELL'; make print_command
$COMMAND
Run Code Online (Sandbox Code Playgroud)

因为$在Makefile中带有特殊含义,所以需要转义。如果需要make扩展定义的变量的值,请使用以下value语法:

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

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

  • 是否可以在没有`export`的情况下在命令行中传递它(即,在`make`之后但仍然没有双倍的美元?)我认为不是,因为它等同于在`Makefile`中具有定义。 (2认同)