Makefile中的Bash字符串操作
我学习了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} 此生成文件仅打印一个空行。 我想我误解了什么,但不知道是什么。任何
#/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的单个实例中执行。