shell 提取文件名和目录名的一些方法
一、使用${} 1、${var##*/} 该命令的作用是去掉变量var从左边算起的最后一个'/'字符及其左边的内容,返回从左边算起的最后一个'/'(不含该字符)的右边的内容。使用例子及结果如下: [linux@test: ] var=/home/user/1.txt [linux@test: ] echo ${var##*/} 1.txt 该操作提取路径下的文件名1.txt 2、${var##*.} 该命令的作用是去掉变量var从左边算起的最后一个'.'字符及其左边的内容,返回从左边算起的最后一个'.'(不含该字符)的右边的内容。使用例子及结果如下: [linux@test: ] var=/home/user/1.txt [linux@test: ] echo ${var##*.} txt 该操作提取后缀名 3、${var#*.} 该命令的作用是去掉变量var从左边算起的第一个'.'字符及其左边的内容,返回从左边算起第一个'.'(不含该字符)的右边部分的内容。使用例子及结果如下: [linux@test: ] var=/home/user/game.tar.gz [linux@test: ] echo ${var#*.} tar.gz 该操作可以提取出文件的多个后缀 4、${var%/*} 该命令的使用是去掉变量var从右边算起的第一个'/'字符及其右边的内容,返回从右边算起的第一个'/'(不含该字符)的左边的内容。使用例子及结果如下: [linux@test: ] var=/home/user/1.txt [linux@test: ] echo ${var%/*} /home/user 该操作提取出文件所在的目录 5、${var%%.*} 该命令的使用是去掉变量var从右边算起的最后一个'.'字符及其右边的内容,返回从右边算起的最后一个'.'(不含该字符)的左边的内容。使用例子及结果如下 [linux@test: ] var=/home/user/1.txt [linux@test: ] echo ${var%%/.*} /home/user/1 看到上面的这些命令,可能会让人感到非常难以理解和记忆,其实不然,它们都是有规律的。 #:表示从左边算起第一个 %:表示从右边算起第一个 ##:表示从左边算起最后一个 %%:表示从右边算起最后一个 换句话来说,#总是表示左边算起,%总是表示右边算起。 *:表示要删除的内容,对于#和##的情况,它位于指定的字符(例子中的'/'和'.')的左边,表于删除指定字符及其左边的内容;对于%和%%的情况,它位于指定的字符(例子中的'/'和'.')的右边,表示删除指定字符及其右边的内容。这里的'*'的位置不能互换,即不能把*号放在#或##的右边,反之亦然。 二、basename和dirname ${}并不是专门为提取文件名和目录名设计的命令,那么basename和dirname命令就是专门为做这一件事而已准备的了。 1、basename 该命令的作用是从路径中提取出文件名,使用方法为basename NAME [SUFFIX]。 1)从路径中提出出文件名(带后缀),例子如下: [linux@test: ] var=/home/user/1.txt [linux@test: ] echo ${basename $var} 1.txt 2)从上面命令的用法中可以看到,后缀(SUFFIX)是一个可选项。所以,若只想提取出文件名file,而不带有后缀,还可以在变量的后面加上后缀名,例子如下: [linux@test: ] var=/home/user/1.txt [linux@test: ] echo ${basename $var .txt} 1 2、dirname 该命令的作用是从路径中提取出目录名,使用方法为 dirname NAME使用例子如下: [linux@test: ] var=/home/user/1.txt [linux@test: ] dirname $var /home/user 该命令不仅能提取出普通文件所的目录,它能提取出任何文件所在的目录,例如目录所在的目录,如下: [linux@test: ] var=/home/user [linux@test: ] dirname $var /home (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |