缩短字符串

0 linux shell-script

我正在编写一个脚本来读取.txt文件并将结果存储在某处。

我需要缩短表达式:

str1/str2/str3/str4/str5
Run Code Online (Sandbox Code Playgroud)

我只需要str5上面的就够了。

我正在while循环中逐行读取该文件。

如何缩短此类字符串?

Kus*_*nda 5

basename实用程序将返回路径名的文件名部分。如果我们将您的字符串视为路径名,它将返回str5

string=str1/str2/str3/str4/str5
basename -- "$string"
Run Code Online (Sandbox Code Playgroud)

以上输出str5。即使$string包含嵌入的换行符或以-以下内容开头,这也会起作用:

string='-str1/str2/str3/str
4/str5'
basename -- "$string"
Run Code Online (Sandbox Code Playgroud)

将 的结果存储basename在变量中是通过普通命令替换完成的:

newstring=$( basename -- "$string" )
Run Code Online (Sandbox Code Playgroud)

但是命令替换会去除所有尾随的换行符:basename作为行分隔符输出的一个,以及所有可能出现在$string.

使用${var##pattern}POSIX shell的操作符可以避免这种情况(并且还可以节省分叉进程和执行单独的命令):

string='very/
strange
file name

'
newstring=${string##*/}
Run Code Online (Sandbox Code Playgroud)

但是会给$strings like /or不同的值/some/dir/