LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1103|回复: 11

关于替换后缀遇到的问题

[复制链接]
发表于 2006-12-1 17:19:37 | 显示全部楼层 |阅读模式
首先感谢两位翻译ABS的老大~~~~!

这几天在看ABS,看到关于更改图片格式的那个例子,自己打算模仿写一个更改文件后缀的脚本,但是遇到了以下几个问题:

先上代码:

#!/bin/bash

TAIL=.shk

k=`find . -name "*.cc"`

change()
{
  find . -name "*.cc"        
}
#问题一:我的本意是找出一个目录及其子目录下面的以.cc结尾的文件,但是每次只能找出当前目录下的;例如test目录下有以.cc为后缀的文件,同时他还有一个子目录test1,test1下面的也有以.cc为后缀的文件;如果要达到我的预期目的,我应该
用什么来替换表示当前目录的“.”?

接上面代码
change $@

#问题二:我通过$@把得到的结果做为多个值,但是怎么把它们传到下面的代码中?

for i in ???               #该用什么样的值来代替???
    do
        file=${i%.*c}
        echo $file
        cat $k>"$file.$TAIL"
        rm $file
        echo "$file.$TAIL"
    done


请各位高手多多指点~~~~~~~~~!
先谢过了
发表于 2006-12-1 17:40:16 | 显示全部楼层
1:直接find就能达到目的。
2:把???直接写成$@。
试试……
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-4 16:22:04 | 显示全部楼层
谢谢楼上的
但是你的方法1,我不太清楚怎么写;方法2不行,不论是用$@  还是"$@"
回复 支持 反对

使用道具 举报

发表于 2006-12-5 09:06:27 | 显示全部楼层
不要用$@,用$*试一下。
回复 支持 反对

使用道具 举报

发表于 2006-12-5 09:09:46 | 显示全部楼层
至于第一个,find本来就会查找当前目录的子目录。
回复 支持 反对

使用道具 举报

发表于 2006-12-5 13:10:12 | 显示全部楼层
其实,$@和$*的意思基本一样。只不过。在用引号的时候它们所表达的意思不一样。
回复 支持 反对

使用道具 举报

发表于 2006-12-5 15:07:22 | 显示全部楼层
for var in $* and for var in $@是不一样的。
回复 支持 反对

使用道具 举报

发表于 2006-12-5 15:42:54 | 显示全部楼层
呵呵,是吗?用这个for var in $* and for var in $@我试了一下。输出也是一样的阿,"$*"和"$@"的表达不一样,你能否讲的再深一些,让我也开开眼界。
回复 支持 反对

使用道具 举报

发表于 2006-12-5 16:16:25 | 显示全部楼层
你看我的实验是:
cc.sh
#!/bin/sh
for var in "$*"
do
echo $var
b=`expr $b + 1`
done
echo $b
运行:./cc.sh a b c
结果为:
a b c
1

另一个:
cc1.sh
#!/bin/sh
for var in "$@"
do
b=`expr $b + 1`
echo $var
done
echo $b
运行:./cc1.sh a b c
结果为:
a
b
c
3

没有加""双引号的时候:
cc.sh
#!/bin/sh
for var in $*
do
echo $var
b=`expr $b + 1`
done
echo $b
运行:./cc.sh a b c
结果为:
a
b
c
3

cc1.sh
#!/bin/sh
for var in $@
do
b=`expr $b + 1`
echo $var
done
echo $b
运行:./cc1.sh a b c
结果为:
a
b
c
3
我的知识也就这么点,还望指点。
回复 支持 反对

使用道具 举报

发表于 2006-12-6 09:07:08 | 显示全部楼层
sorry我理解错了,^^
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表