【发布时间】:2021-12-20 03:43:48
【问题描述】:
我知道这可以使用正则表达式轻松完成,就像我在 https://stackoverflow.com/a/33379831/3962126 上回答的那样,但是我需要在 bash 中执行此操作。
所以我在 Stackoverflow 上找到的最接近的问题是 bash: extracting last two dirs for a pathname,但不同的是如果
DIRNAME = /a/b/c/d/e
那我需要提取
d
【问题讨论】:
-
$(basename $(dirname "$DIRNAME"))是否满足您的要求?如果做不到这一点,x=${DIRNAME%/*}; echo ${x##*/}会完成您需要的工作吗?当心退化的情况。 -
我在下面发布答案后看到了您的评论。是的,它确实。我真的不明白这个命令如何/为什么提取最后两个斜杠之间的字符串,但我不在乎它对我有用。
-
dirname命令删除文件名的最后一个组件,删除/e;basename命令删除除了文件名的最后一个部分之外的所有内容,删除/a/b/c,只留下d。 -
@Jonathan,请注意解决方案
x=${DIRNAME%/*}; echo ${x##*/}也与此处的d匹配:DIRNAME=a/b,我认为这不是 OP 想要的。 -
@JonathanLeffler,这有点错误——你也需要在目录名扩展周围加上引号。
标签: bash