麻烦解析一下 "${f/doc/txt}"
-
- 帖子: 44
- 注册时间: 2007-04-29 13:15
麻烦解析一下 "${f/doc/txt}"
for f in *.doc ; do mv "$f" "${f/doc/txt}" .这是一个文件名后缀更改脚步,后面的用法很奇怪,谁能解析一下$,{},f/doc/txt这三个东西?
- xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
- 联系:
Re: 麻烦解析一下 "${f/doc/txt}"
将变量f值里面的doc替换成txt
ps这个是只替代第一个符合条件的,要全部替换可以${f//doc/txt}
ps这个是只替代第一个符合条件的,要全部替换可以${f//doc/txt}
- xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
- 联系:
Re: 麻烦解析一下 "${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的字符串(从左边开始匹配,若#换成%则从右边开始)
-
- 帖子: 44
- 注册时间: 2007-04-29 13:15
-
- 帖子: 338
- 注册时间: 2008-05-24 1:24
Re: 麻烦解析一下 "${f/doc/txt}"
收下了,谢谢 :)
如果努力的目的是为了超越他人,那么我们永远成功不了
大道是平的,我们该做的是让自己快乐,同时带给他人快乐
好好涵养自己的性格
才华是刀刃,辛苦是磨刀石
多食果蔬,健康长寿;少吃不吃鱼肉,珍爱它类生命,远离自身疾病
大道是平的,我们该做的是让自己快乐,同时带给他人快乐
好好涵养自己的性格
才华是刀刃,辛苦是磨刀石
多食果蔬,健康长寿;少吃不吃鱼肉,珍爱它类生命,远离自身疾病
- goodluck1982
- 帖子: 171
- 注册时间: 2007-07-05 2:48
Re: 麻烦解析一下 "${f/doc/txt}"
为了保险起见
替换后缀最好这样使用 ${f%.doc}.txt
替换后缀最好这样使用 ${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
-
- 帖子: 4
- 注册时间: 2008-12-04 18:21
Re: 麻烦解析一下 "${f/doc/txt}"
楼上的例子不错,很注意编程里的细节嘛!
- goodluck1982
- 帖子: 171
- 注册时间: 2007-07-05 2:48
Re: 麻烦解析一下 "${f/doc/txt}"
那要看自己是要处理一个一次性的具体问题
还是要写一个通用的脚本
如果是前者,随便怎样只要达到目的就行了,不管实现方式多么dirty
而若是后者,那就要考虑到很多特殊情况了
还是要写一个通用的脚本
如果是前者,随便怎样只要达到目的就行了,不管实现方式多么dirty
而若是后者,那就要考虑到很多特殊情况了
- bones7456
- 帖子: 8495
- 注册时间: 2006-04-12 20:05
- 来自: 杭州
- 联系: