之前在这篇文章中已经列举了一种通用的批量修改文件后缀名的方法,今天看到变量替换${var%pattern},因此又有下面的一种方法:
#!/bin/bash if [ $# -ne 3 ] then echo "Usage:$(basename $0) old_name new_name dir" exit -1 fi old_name="$1" new_name="$2" dir="$3" for file in $(ls *.$old_name) do newfile=${file%.$old_name}.$new_name mv $file $newfile echo "$file ===> $newfile" done exit 0
该脚本用到了变量替换中的子串删除方法:${var%pattern}。它的作用是从变量$var的末尾删除最小匹配$pattern字符串。与此对应的方法${var%%pattern}则是删除最大匹配$pattern字串。比如:
edsionte@edsionte-laptop:~/mytest$ var=abcd12345abc6789 edsionte@edsionte-laptop:~/mytest$ pattern=b*9 edsionte@edsionte-laptop:~/mytest$ echo "${var%$pattern}" abcd12345a edsionte@edsionte-laptop:~/mytest$ echo "${var%%$pattern}" a
如果想从变量$var开头删除字符串$pattern,则可以使用${var#pattern}删除最小匹配的字符串,而${var##pattern}则可以删除最大匹配$pattern的字符串。比如:
edsionte@edsionte-laptop:~/mytest$ var=abcd12345abc6789 edsionte@edsionte-laptop:~/mytest$ pattern=a*c edsionte@edsionte-laptop:~/mytest$ echo "${var#$pattern}" d12345abc6789 edsionte@edsionte-laptop:~/mytest$ echo "${var##$pattern}" 6789
从变量中删除指定字符串是一种常见的操作。