我正在编写一个脚本来读取.txt文件并将结果存储在某处。
我需要缩短表达式:
str1/str2/str3/str4/str5
Run Code Online (Sandbox Code Playgroud)
我只需要str5上面的就够了。
我正在while循环中逐行读取该文件。
如何缩短此类字符串?
该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/