麻烦解析一下 "${f/doc/txt}"
发表于 : 2008-12-09 10:25
for f in *.doc ; do mv "$f" "${f/doc/txt}" .这是一个文件名后缀更改脚步,后面的用法很奇怪,谁能解析一下$,{},f/doc/txt这三个东西?
$们
$ 在正则表达式中作为行结束符.
$! 获取上一行进程的进程号。
$*,$@ 位置参数
$? 退出状态变量.$?保存一个命令/一个函数或者脚本本身的退出状态.
$$ 进程 ID 变量.这个$$变量保存运行脚本进程 ID
$# 参数个数
$0 运行程序本身的文件名
${!#} 最后一个参数
${#str} 字符串长度
${var/Pattern/Replacement}
使用 Replacement 来替换 var 中的第一个 Pattern 的匹配.
${var//Pattern/Replacement}
全局替换.在 var 中所有的匹配,都会用 Replacement 来替换.
${var/#Pattern/Replacement}
如果 var 的前缀匹配到了 Pattern,那么就用 Replacement 来替换 Pattern.
${var/%Pattern/Replacement}
如果 var 的后缀匹配到了 Pattern,那么就用 Replacement 来替换 Pattern.
${!varprefix*}, ${!varprefix@}
使用变量的前缀来匹配前边所有声明过的变量.
$RANDOM
$RANDOM 是 Bash 的内部函数(并不是常量),这个函数将返回一个范围在 0 - 32767 之间的一个伪随机整数
${x:-"$default_arg"}
参数替代,如果$x为空,则替代为$default_arg
${x#parttern}
删除第一个匹配parttern的字符串(从左边开始匹配,若#换成%则从右边开始)
${x##parttern}
删除所有匹配parttern的字符串(从左边开始匹配,若#换成%则从右边开始)
代码: 全选
[12-06 18:24> ~]# a=doc.a.b.doc
[12-06 18:24> ~]# echo ${a}
doc.a.b.doc
[12-06 18:24> ~]# echo ${a/doc/txt}
txt.a.b.doc
[12-06 18:24> ~]# echo ${a//doc/txt}
txt.a.b.txt
[12-06 18:24> ~]# echo ${a%.doc}
doc.a.b
[12-06 18:24> ~]# echo ${a%.doc}.txt
doc.a.b.txt