#!/bin/bash
#
count=1
for asf in *.mp3
do
new=${asf%_*}.${asf#*.}
echo $new
let count++
done
-----------------------------------------------
借助
%
和
#
操作符可以轻松的解析
"
名称
.
扩展名
"
这种格式的文件名字。
例
1
:
;file_jpg="sample.jpg"
;name=${file_jpg%.*}
Echo FIle name is:$name
输出结果为:
File name is : sample
例
2
:
;extension=${file_jpg#*.}
;echo Extension is : $extension
输出结果是:
Extension is : jpg
工作原理:
第一个任务中,为了从“名称。扩展名”这种格式文件名中提取名称,我们用了
%
操作符。
${VAR%.*}
的含义是:
从
$VAR
中删除位于
%
右侧的通配符(在例
1
中是
.*
)所匹配的字符串。通配符从右向左进行匹配。例
1
中
VAR
的值为
sample.jpg
,那么通配符从右向左匹配
.*
的话会匹配到
.jpg
。因此从
$VAR
中删除匹配结果,就得到了文件名
"sample"
%
属于非贪婪匹配操作。它从右到左找出匹配通配符的最短结果。
%%
属于贪婪匹配,所谓贪婪的意思就是会匹配符合条件的最长的字符串。匹配方向也是从右向左匹配。如果
$VAR
的值为
hack.fun.book.txt
,那么用贪婪匹配
${VAR%%.*},
则匹配到的结果为
hack
。
#
操作符也是非贪婪匹配,不过其匹配方向是从左向右。当然也是匹配最短结果。
${VAR#*.}
的含义是:
从
$VAR
中删除位于
#
右侧的通配符
(
这里即
*.)
所匹配的字符串,匹配方向是从左向右。
##
则属于贪婪匹配,即从左向右匹配最长结果并删除匹配结果。
再举例说明下:
VAR=hack.fun.book.txt
使用
#
操作符:
$echo ${VAR#*.}
输出结果为
: fun.book.txt
使用
##
操作符:
$ echo ${VAR##*.}
输出结果为
txt
练习:
URL=www.google.cn #echo ${URL%.*} ${URL%%.*} ${URL#*.} ${URL##*.}
转载于:https://blog.51cto.com/liuer/1166303