1. 获取文件名:basename
shell本身提供了获取文件名的命令:basename,该命令可以从路径中提取出文件名(带后缀)。
举个栗子:
#/bin/bash
File=/dir1/dir2/dir3/a.b.c.txt
basename $File
执行的结果为:
a.b.c.txt
上面的栗子输出结果是文件后缀的,若不想带后缀,则:
#/bin/bash
File=/dir1/dir2/dir3/a.b.c.txt
echo $(basename $File .txt)
结果为:
a.b.c
2. 获取路径:dirname
dirname:从路径中提取出目录名
#/bin/bash
File=/dir1/dir2/dir3/a.b.c.txt
dirname $File
结果为:
/dir1/dir2/dir3
上面两个命令是shell提供的,难免有些限制,我们可以使用${}来灵活获取,而且${}可以用来做shell的字符子串提取。
3. ${var##*/}
直接看个栗子:
#/bin/bash
var='/dir1/dir2/dir3/a.b.c.d'
echo ${var##*/}
上面这个栗子是:左起,找到最后一个'/'字符,返回其后面的内容(不含'/')
上面栗子的结果为:
a.b.c.d
4. ${##*.}
跟上面栗子一样:左起,找到最后一个'.'字符,返回其后面的内容(不含'.')
#/bin/bash
var='/dir1/dir2/dir3/a.b.c.d'
echo ${var##*/}
结果为:
d
5. ${var#*.}
左起,找到第一个'.'字符,返回其后面的内容(不含'.')
#/bin/bash
var='/dir1/dir2/dir3/a.b.c.d'
echo ${var#*.}
结果为:
b.c.d
6. ${var%/*}
右起,找到第一个'/'字符,返回开始到该字符的内容(不含'/')
#/bin/bash
var='/dir1/dir2/dir3/a.b.c.d'
echo ${var%/*}
结果为:
/dir1/dir2/dir3
7.${var%%.*}
右起,找到最后一个'.'字符,返回开始到该字符的内容(不含'.')
#/bin/bash
var='/dir1/dir2/dir3/a.b.c.d'
echo ${var%%.*}
结果为:
/dir1/dir2/dir3/a
对${}的总结:
#代表左起,%代表右起
两个符号代表最后一个字符,一个符号代表第一个字符
- #:左起第一个
- ##: 左起最后一个
- %:右起第一个
- %%:右起最后一个