一、场景介绍
在许多场景下,我们都需要对文件名称或者文件所在的目录进行操作,已达到我们业务目的。通常的操作是由路径中提取文件名,从路径中提取目录名,提取文件后缀等等一系列的操作。
二、实战操作${}
-
${var##*/}
该命令的作用是去掉变量var从左边算起的最后一个'/'字符及其左边的内容,返回从左边算起的最后一个'/'(不含该字符)的右边的内容。使用例子及结果如下: [root@node100 ~]# var=/dir1/dir2/file.txt [root@node100 ~]# echo ${var##*/} file.txt [root@node100 ~]#
-
${var##*.}
该命令的作用是去掉变量var从左边算起的最后一个'.'字符及其左边的内容,返回从左边算起的最后一个'.'(不含该字符)的右边的内容。使用例子及结果如下: [root@node100 ~]# var=/dir1/dir2/file.txt [root@node100 ~]# echo ${var##*.} txt [root@node100 ~]#
-
${var#*.}
该命令的作用是去掉变量var从左边算起的第一个'.'字符及其左边的内容,返回从左边算起第一个'.'(不含该字符)的右边部分的内容。使用例子及结果如下: [root@node100 ~]# var=/dir1/dir2/file.tar.gz [root@node100 ~]# echo ${var#*.} tar.gz [root@node100 ~]#
-
${var%/*}
该命令的使用是去掉变量var从右边算起的第一个'/'字符及其右边的内容,返回从右边算起的第一个'/'(不含该字符)的左边的内容。使用例子及结果如下: [root@node100 ~]# var=/dir1/dir2/file.txt [root@node100 ~]# echo ${var%/*} /dir1/dir2 [root@node100 ~]#
-
${var%%.*}
该命令的使用是去掉变量var从右边算起的最后一个'.'字符及其右边的内容,返回从右边算起的最后一个'.'(不含该字符)的左边的内容。使用例子及结果如下: [root@node100 ~]# var=/dir1/dir2/file.txt [root@node100 ~]# echo ${var%%.*} /dir1/dir2/file [root@node100 ~]#
-
${}
总结其实
${}
并不是专门为提取文件名或目录名的,它的使用是变量的提取和替换等等操作,它可以提取非常多的内容,并不一定是上面五个例子中的/
或.
。也就是说,上面的使用方法只是它使用的一个特例。#:表示从左边算起第一个 %:表示从右边算起第一个 ##:表示从左边算起最后一个 %%:表示从右边算起最后一个
三、实战操作 basename
和 dirname
-
${}
并不是专门为提取文件名和目录名设计的命令,那么basename
和dirname
命令就是专门为做这一件事而已准备的了。 -
basename
该命令的作用是从路径中提取出文件名,使用方法为
basename NAME [SUFFIX]
[root@node100 ~]# var=/dir1/dir2/file.txt [root@node100 ~]# echo $(basename $var) file.txt [root@node100 ~]#
从上面命令的用法中可以看到,后缀(
SUFFIX
)是一个可选项。所以,若只想提取出文件名file
,而不带有后缀,还可以在变量的后面加上后缀名,例子如下:[root@node100 ~]# var=/dir1/dir2/file.txt [root@node100 ~]# echo $(basename $var .txt) file [root@node100 ~]#
-
dirname
该命令的作用是从路径中提取出目录名,使用方法为
dirname NAME
使用例子如下:[root@node100 ~]# var=/dir1/dir2/file.txt [root@node100 ~]# dirname $var /dir1/dir2 [root@node100 ~]#
注:该命令不仅能提取出普通文件所的目录,它能提取出任何文件所在的目录,例如目录所在的目录,如下:
[root@node100 ~]# var=/dir1/dir2/ [root@node100 ~]# dirname $var /dir1 [root@node100 ~]#