Makefile中的Bash字符串操作

Makefile中的Bash字符串操作,bash,makefile,substring,Bash,Makefile,Substring,我学习了bash的字符串操作,尤其是子字符串替换: #/bin/bash VAR1=“aaaa.bbbb.cccc” VAR2=“bbbb*” echo${VAR1%${VAR2} 这个bash脚本打印“aaaa”。我试图将它包含在我的makefile中,但我无法使它工作 SHELL:=/bin/bash VAR1=“aaaa.bbbb.cccc” VAR2=“bbbb*” 全部: @echo$${VAR1%$${VAR2} 此生成文件仅打印一个空行。 我想我误解了什么,但不知道是什么。任何

我学习了bash的字符串操作,尤其是子字符串替换:

#/bin/bash
VAR1=“aaaa.bbbb.cccc”
VAR2=“bbbb*”
echo${VAR1%${VAR2}
这个bash脚本打印“aaaa”。我试图将它包含在我的makefile中,但我无法使它工作

SHELL:=/bin/bash
VAR1=“aaaa.bbbb.cccc”
VAR2=“bbbb*”
全部:
@echo$${VAR1%$${VAR2}
此生成文件仅打印一个空行。
我想我误解了什么,但不知道是什么。任何帮助都会得到真正的感谢。

p>p>p>p>p>p>p>p>pp>p>p>p>p>p>pp>pp>pp>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>B>a a a a,a a a a>s,s,a a a a a a a a>a>p>p>p>p>p>p>p>p>p>pp>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>pp>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p>p你可以使用内置的make函数,如(在本例中)
$(r,a,B)


问题在于
VAR1
VAR2
不是shell变量,而是Makefile变量。 更为复杂的是,Makefile配方中的每一行都在一个单独的shell进程中执行,这意味着以下天真的尝试将失败:

all:
    VAR1="aaaa.bbbb.cccc"
    VAR2="bbbb*"
    @echo $${VAR1%$${VAR2}}
由于
VAR1
在一个shell中定义,
VAR2
在另一个shell中定义,
echo
在第三个shell中定义,其中没有定义任何变量。您可以使用以下选项:

all:
    @VAR1="aaaa.bbbb.cccc"; \
     VAR2="bbbb*"; \
     echo $${VAR1%$${VAR2}};

在Makefile中将单个
bash
语句(全部在一个shell中执行)拆分为多行。

无需在VAR1和VAR2周围加双引号。如果要将VAR1和VAR2置于
all:

SHELL:=/bin/bash

export VAR1=aaaa.bbbb.cccc
export VAR2=bbbb*

all:
    @echo $${VAR1%$${VAR2}}

我知道这些内置函数,但我试图在Makefile中包含原生bash。切普纳给了我想要的东西。无论如何,非常感谢你花时间回答我:)这正是我想要的,你的解释很清楚。我想对变量进行一些“范围界定”,但找不到任何相关内容。非常感谢。你不需要花括号。反斜杠足以确保命令在shell的单个实例中执行。