我在 GNU make 文件中有一个变量:
VAR=DDC
我想将这些字符合并到另一个字符串中并将它们分配给不同的变量,例如:
TOT_VAR=--'D','D','C'--
我的第一个想法是做这样的伪代码:
#Pseudo code
TOT_VAR=--'@(letter1, VAR)','@(letter2, VAR)','@(letter3, VAR)'--
但我找不到任何提取单个字符的函数。我该怎么做?
您可以用来sed进行转换:
echo DDC | sed -E "s/^(.{1})(.{1})(.{1}).*/--'\1','\2','\3'--/")
这是做什么的:
DDC传输到sedsed解析字符串并匹配前三个字符DDC您的替换格式,将这三个字符插入占位符\1,\2并且\3[如果您使用的是 Linux 操作系统而不是像我这样的 MacOS,那么我认为您需要使用sed -e而不是sed -E]
正如@Maxim 的评论所说,您需要调用 shellmake才能运行此命令。将此方法构建到一个简单的 makefile 中来说明:
VAR=DDC
TOT_VAR:=$(shell echo $(VAR) | sed -E "s/^(.{1})(.{1})(.{1}).*/--'\1','\2','\3'--/")
all:
echo "$(TOT_VAR)"
在此运行make all会产生此输出并显示替换有效:
echo "--'D','D','C'--"
--'D','D','C'--
GNU 表工具包有一个函数explode可以将字符串扩展为列表:
$(调用explode, stringlist , string )
在 string 中的 stringlist 中每次出现字符串后插入一个空格。该函数主要用于将字符串转换为列表:
$(call explode,0 1 2 3 4 5 6 7 8 9,0x1337c0de) --> 0 x1 3 3 7 c0 de
您可以访问变量的成员,如下所示:
include gmtt/gmtt.mk
XPLD_VAR := $(call explode,$([alnum]),$(VAR))
TOT_VAR := --$(word 1,$(XPLD_VAR)),$(word 2,$(XPLD_VAR)),$(word 3,$(XPLD_VAR))--