关于string:在Bash中从end中提取子字符串

Extract a substring from end in Bash

本问题已经有最佳答案,请猛点这里访问。

我有一个看起来像这样的字符串:

hello/my/name/is/lebowski

我需要在最后一个/之后提取字符串的一部分(在本例中为lebowski)。 我需要做的就是Bash。 我该如何实现这一目标? 我可以使用正则表达式功能在Java或Python中执行此操作,但我不知道如何通过Bash命令进行相同操作。

任何帮助,将不胜感激。 谢谢!


通常,当您的文本看起来像目录路径时,basenamedirname命令可以派上用场。 basename为您提供没有前导路径的文件名(在本例中为lebowski),dirname为您提供没有文件的目录名(在本例中为hello/my/name/is/)。

无论哪种方式,这些都产生了子进程。 您可以使用变量替换来获得所需内容,如下所示:

1
2
var="hello/my/name/is/lebowski"
name=${var##*/}

我建议您阅读bash手册中有关替换的部分以获取更多信息。


使用简单的bash参数替换:

1
2
3
s="hello/my/name/is/lebowski"
echo ${s##*/}
lebowski

${var##Pattern} - Remove from $var the longest part of $Pattern that matches the front end of $var


就像在ksh中一样

1
2
3
4
    st='hello/my/name/is/lebowski'
    echo ${st##*/}

    lebowski

1
2
3
$ mystring='hello/my/name/is/lebowski'
$ echo ${mystring##*/}
lebowski