2016-06-07 87 views
1

我正在写一个makefile,我可以访问该文件正在运行的路径。 。修剪最新的任意文件夹名称的路径

MKFILE_PATH= $(abspath $(lastword $(MAKEFILE_LIST)))

我要修剪这条道路,最终切断最后packages

下面是一些例子:

  • 输入:/Users/thomasreggi/Desktop/monorepo/packages/event-as-promised/packages/node_modules/.bin/ied
  • 输出:/Users/thomasreggi/Desktop/monorepo/packages/event-as-promised

  • 开关输入:/Users/thomasreggi/Desktop/monorepo/packages/event-as-promised/node_modules/.bin/ied

  • 输出:/Users/thomasreggi/Desktop/monorepo

如何操作shell/make的路径?

回答

2

我们可以使用参数subsitution从字符串这样的右端去掉最短匹配的部分:

$ var="/Users/thomasreggi/Desktop/monorepo/packages/event-as-promised/packages/node_modules/.bin/ied" 
$ echo "${var%packages*}" 
/Users/thomasreggi/Desktop/monorepo/packages/event-as-promised/ 
$ var="/Users/thomasreggi/Desktop/monorepo/packages/event-as-promised/node_modules/.bin/ied" 
$ echo "${var%packages*}" 
/Users/thomasreggi/Desktop/monorepo/ 

${var%Pattern}手段从$var的后端图形匹配最短的部分除去从(右)$var

要删除最长的匹配部分,我们可以使用${var%%Pattern}。在参数替换

更多信息,可以发现here

+0

嘿感谢!出于某种原因,这可以在终端中使用,但不能在makefile中使用。任何想法为什么? – ThomasReggi

+0

在Make配方中,shell变量是用双美元符号访问的。你可能需要'var ='$(MAKEVARIABLE)'; echo“$$ {var%packages *}”' – tripleee

相关问题