我正在编写一个makefile,我可以访问该文件正在运行的路径。 MKFILE_PATH
。
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操作路径?
答案 0 :(得分:2)
我们可以使用参数替换从字符串的右端删除最短的匹配部分,如下所示:
$ 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
的后端(右侧)匹配的Pattern的最短部分。
要删除最长的匹配部分,我们可以使用${var%%Pattern}
。
可以找到有关参数替换的更多信息here