我用下面的命令在我makefile
apps := $(shell fzr provide apps )
apps := $(subst ],,$(subst [,,$(apps)))
中的命令即时得到值数组和从中取出数组[]
,
我想在我的终端运行此命令我用的是以下
fzr provide apps | (subst ],,$(subst [,,$(apps))) | $(apps)
我得到错误
bash: apps: command not found
bash: apps: command not found
bash: subst: command not found
bash: subst: command not found
我缺少什么吗?
如果我只跑
fzr provide apps
我得到的,其中工程
[app1 app2 app3]
这个想法是检查命令
apps := $(subst ],,$(subst [,,$(apps)))
它在Mac,但在Windows它不是...
这是有效的在生成文件的命令不在终端提示有效的。
如果你想删除的bash脚本的开头和结尾的方括号,尝试
fzr provide apps |
sed 's/^\[//;s/\]$//'
如果你想把他们在Makefile
,请注意,您需要将美元符号的两倍(一个美元符号得到由make
自身评估;加倍它通过文字美元符号的外壳)。
apps := $(shell fzr provide apps | sed 's/^\[//;s/\]$$//')
你Makefile
使用的语法,专用于GNU制作;也许你在Windows上的make
版本不是GNU兼容的一个。
下面是@tripleee张贴稿件的较短的版本:
fzr provide apps | tr -d '[]'
无论他们出现在输入字符串这消除[
或]
字符。
在你的makefile,$(apps)
扩展到makefile文件变量apps
的价值。这是在生成文件的读出时间进行,并执行外壳命令之前的值被取代的(因而壳永远不会看到$(apps)
,而是看见appval1
,或任何应用恰好是。
在壳,(我假设一个bash壳),$(apps)
装置运行命令apps
。如果你想在shell变量的值,你必须使用${apps}
。此外,$(subst)
是一个让结构,壳不明白,要么,所以你必须替换的东西(可能sed
)。
因此,在这种情况下,你需要做的是这样的:
fzr provide apps | sed "s/[][]//g"
注:此代替所有方括号,而不只是开头和结尾。如果你想只是做前端和后端的,看到tripleee的答案。