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

sh/bash/dash/ksh/zsh等Shell脚本
回复
ztf
帖子: 44
注册时间: 2007-04-29 13:15
送出感谢: 0
接收感谢: 0
联系:

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

#1

帖子 ztf » 2008-12-09 10:25

for f in *.doc ; do mv "$f" "${f/doc/txt}" .这是一个文件名后缀更改脚步,后面的用法很奇怪,谁能解析一下$,{},f/doc/txt这三个东西?
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
送出感谢: 0
接收感谢: 3 次
联系:

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

#2

帖子 xiooli » 2008-12-09 10:28

将变量f值里面的doc替换成txt
ps这个是只替代第一个符合条件的,要全部替换可以${f//doc/txt}
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
送出感谢: 0
接收感谢: 3 次
联系:

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

#3

帖子 xiooli » 2008-12-09 10:31

$们

$ 在正则表达式中作为行结束符.
$! 获取上一行进程的进程号。
$*,$@ 位置参数
$? 退出状态变量.$?保存一个命令/一个函数或者脚本本身的退出状态.
$$ 进程 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的字符串(从左边开始匹配,若#换成%则从右边开始)
ztf
帖子: 44
注册时间: 2007-04-29 13:15
送出感谢: 0
接收感谢: 0
联系:

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

#4

帖子 ztf » 2008-12-09 10:42

谢谢楼上. :em02
xyywll
帖子: 338
注册时间: 2008-05-24 1:24
送出感谢: 0
接收感谢: 0

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

#5

帖子 xyywll » 2008-12-09 11:43

收下了,谢谢 :)
如果努力的目的是为了超越他人,那么我们永远成功不了
大道是平的,我们该做的是让自己快乐,同时带给他人快乐
好好涵养自己的性格
才华是刀刃,辛苦是磨刀石
多食果蔬,健康长寿;少吃不吃鱼肉,珍爱它类生命,远离自身疾病
头像
goodluck1982
帖子: 171
注册时间: 2007-07-05 2:48
送出感谢: 0
接收感谢: 0

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

#6

帖子 goodluck1982 » 2008-12-09 16:06

为了保险起见
替换后缀最好这样使用 ${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
rainjn
帖子: 4
注册时间: 2008-12-04 18:21
送出感谢: 0
接收感谢: 0

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

#7

帖子 rainjn » 2008-12-09 22:16

楼上的例子不错,很注意编程里的细节嘛!
头像
goodluck1982
帖子: 171
注册时间: 2007-07-05 2:48
送出感谢: 0
接收感谢: 0

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

#8

帖子 goodluck1982 » 2008-12-11 0:27

那要看自己是要处理一个一次性的具体问题
还是要写一个通用的脚本
如果是前者,随便怎样只要达到目的就行了,不管实现方式多么dirty
而若是后者,那就要考虑到很多特殊情况了
头像
bones7456
论坛版主
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
送出感谢: 0
接收感谢: 8 次
联系:

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

#9

帖子 bones7456 » 2008-12-12 15:03

很好很强大~
关注我的blog: ε==3
回复

回到 “Shell脚本”