Shell 修剪到最新任意文件夹名称的路径
我正在编写一个makefile,在这里我可以访问文件运行的路径<代码>MKFILE_路径Shell 修剪到最新任意文件夹名称的路径,shell,makefile,Shell,Makefile,我正在编写一个makefile,在这里我可以访问文件运行的路径MKFILE_路径 MKFILE\u PATH=$(abspath$(lastword$(MAKEFILE\u LIST))) 我想修剪这条路径,切断最后一个包的末端 以下是一些例子: 输入:/Users/thomasreggi/Desktop/monorepo/packages/event as promisted/packages/node_modules/.bin/ied 输出:/Users/thomasreggi/Deskt
MKFILE\u PATH=$(abspath$(lastword$(MAKEFILE\u LIST)))
我想修剪这条路径,切断最后一个包的末端
以下是一些例子:
- 输入:
/Users/thomasreggi/Desktop/monorepo/packages/event as promisted/packages/node_modules/.bin/ied
- 输出:
/Users/thomasreggi/Desktop/monorepo/packages/event作为承诺
- 输入:
/Users/thomasreggi/Desktop/monorepo/packages/event as promised/node_modules/.bin/ied
- 输出:
/Users/thomasreggi/Desktop/monorepo
如何使用shell/make操作路径?我们可以使用参数替换从字符串右端删除最短的匹配部分,如下所示:
$ 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}
有关参数替换的更多信息,请参见嘿,谢谢!出于某种原因,这在终端中有效,但在makefile中无效。知道为什么吗?在Make配方中,shell变量是用双美元符号访问的。您可能需要类似于var='$(MAKEVARIABLE)';echo“$${var%packages*}”