删除bash变量中最后一个斜杠之前的所有内容

eri*_*rik 2 scripting bash tar sed

myVar在 bash 中有一个变量,其中包含一个长字符串,如下所示:

-rw-rw-rw- root/root 16 2018-02-12 10:03 foo_tar/baz1234_
Run Code Online (Sandbox Code Playgroud)

我想删除myVar最后一个斜杠(包括最后一个斜杠)之前的所有内容,这样myVar最终只存储baz1234_. 如何删除所有内容并将结果存储在变量中?

我遇到过处理 sed 的解决方案,但那些解决文件处理的问题,因此我的问题。

Ini*_*ian 5

您应该为此使用bash 参数扩展并使用类型的子字符串删除${PARAMETER##PATTERN}

从一开始就 - ${PARAMETER##PATTERN}

这种形式是从字符串的开头删除试图匹配它的描述模式。在##尝试与最长的文本匹配来做到这一点。

用于您的示例

$ myVar='-rw-rw-rw- root/root 16 2018-02-12 10:03 foo_tar/baz1234_'
$ echo "${myVar##*/}"
baz1234_
Run Code Online (Sandbox Code Playgroud)

正如评论中所指出的,有问题的字符串似乎ls是变量中命令的输出!这不是理想的脚本方式。更清楚地解释您的要求。