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