在 Bash 中提取文件基本名称
Fumbani Banda
2023年1月30日
2022年5月11日
本教程展示了使用子字符串参数扩展和 basename
命令提取文件基本名称的不同方法。
在 Bash 中使用子字符串参数扩展提取文件基名
Bash 中的参数是存储值的元素。扩展是用它的值替换参数引用。
要在 Bash 中进行参数扩展,请在参数名称前加上 $
字符。将参数名称括在花括号中是可选的。
参数扩展的两个符号如下所示。
$parameter
${parameter}
在参数扩展的花括号内,一些运算符可以与它们的参数一起添加。运算符放置在参数名称之后和右花括号之前。
我们可以将这些运算符用于条件、子字符串、子集、前缀列表、元素计数和大小写修改扩展。这些运算符只修改参数而不修改参数的值。
下面的脚本使用子字符串参数扩展来通过字符串模式匹配提取子字符串。使用的语法是 ${parameter##pattern}
。
##
指定模式应该从字符串的左侧开始匹配,*/
是我们案例中的模式。在这种情况下,${path##*/}
匹配来自 path
变量的最后一个/
并返回剩余的子字符串 file1.txt
。
path=/home/delftstack/test/file1.txt
echo "${path##*/}"
执行脚本会将文件名打印到标准输出。
file1.txt
在 Bash 中使用 basename
命令提取文件基本名称
basename
是 Linux 中的一个命令,它返回给定文件路径作为参数的最后一个元素。在下面的脚本中,basename
命令被赋予以文件路径作为参数的 path
变量。该脚本使用命令替换来执行 basename
命令。
命令替换是 Bash 的一项功能,它允许我们运行 Linux 命令并将命令的输出存储在变量中。使用此功能执行命令后,该命令的标准输出将替换该命令,并删除任何尾随换行符。
basename
命令的输出替换命令本身并分配给 fname
变量。printf
命令用于将 fname
变量的内容显示到标准输出。
path=/home/delftstack/test/file1.txt
fname=$(basename "$path")
printf $fname
printf "\n"
该脚本在执行后显示以下输出。
file1.txt
Author: Fumbani Banda