分页: 1 / 1

麻烦解析一下 "${f/doc/txt}"

发表于 : 2008-12-09 10:25
ztf
for f in *.doc ; do mv "$f" "${f/doc/txt}" .这是一个文件名后缀更改脚步,后面的用法很奇怪,谁能解析一下$,{},f/doc/txt这三个东西?

Re: 麻烦解析一下 "${f/doc/txt}"

发表于 : 2008-12-09 10:28
xiooli
将变量f值里面的doc替换成txt
ps这个是只替代第一个符合条件的,要全部替换可以${f//doc/txt}

Re: 麻烦解析一下 "${f/doc/txt}"

发表于 : 2008-12-09 10:31
xiooli
$们

$ 在正则表达式中作为行结束符.
$! 获取上一行进程的进程号。
$*,$@ 位置参数
$? 退出状态变量.$?保存一个命令/一个函数或者脚本本身的退出状态.
$$ 进程 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的字符串(从左边开始匹配,若#换成%则从右边开始)

Re: 麻烦解析一下 "${f/doc/txt}"

发表于 : 2008-12-09 10:42
ztf
谢谢楼上. :em02

Re: 麻烦解析一下 "${f/doc/txt}"

发表于 : 2008-12-09 11:43
xyywll
收下了,谢谢 :)

Re: 麻烦解析一下 "${f/doc/txt}"

发表于 : 2008-12-09 16:06
goodluck1982
为了保险起见
替换后缀最好这样使用 ${f%.doc}.txt

代码: 全选

[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

Re: 麻烦解析一下 "${f/doc/txt}"

发表于 : 2008-12-09 22:16
rainjn
楼上的例子不错,很注意编程里的细节嘛!

Re: 麻烦解析一下 "${f/doc/txt}"

发表于 : 2008-12-11 0:27
goodluck1982
那要看自己是要处理一个一次性的具体问题
还是要写一个通用的脚本
如果是前者,随便怎样只要达到目的就行了,不管实现方式多么dirty
而若是后者,那就要考虑到很多特殊情况了

Re: 麻烦解析一下 "${f/doc/txt}"

发表于 : 2008-12-12 15:03
bones7456
很好很强大~