LinuxSir.cn,穿越时空的Linuxsir!

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

文件名中遇到空格如何处理?

[复制链接]
发表于 2005-10-31 00:21:51 | 显示全部楼层 |阅读模式
写shell script时遇到了这个问题
for file in $*
do
...
done

如果$*中的文件名里有空格,那将会被当作两个文件处理,请问这如何解决?
先谢!
发表于 2005-10-31 02:08:22 | 显示全部楼层
  1. ifs=$IFS
  2. for file in varlist;do echo $file;done
  3. IFS=$ifs
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-31 11:53:12 | 显示全部楼层
Post by 寂寞烈火
  1. ifs=$IFS
  2. for file in varlist;do echo $file;done
  3. IFS=$ifs
复制代码


能不能解释一下?
我看到你先保存了IFS,做完之后复原,但并没有更改?
回复 支持 反对

使用道具 举报

发表于 2005-11-1 09:02:05 | 显示全部楼层
首先把脚本后面的参数用双引号引起来,文件之间用自己定义的单字符分隔符分开;
脚本里再把IFS赋为自己定义的分隔符就行了
回复 支持 反对

使用道具 举报

发表于 2005-11-1 12:52:12 | 显示全部楼层
just do:
for file in $@
do
  ...
done

because $* is the "$1c$2c$3..." (c is the first char of $IFS) and $@ is the "$1""$2"...(every position param is quoted separately!).
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-2 18:43:43 | 显示全部楼层
$@是比$*好
前天测试的时候发现原来是在for之前的一个命令造成的错误--getopt,无论$@还是$*都会被getopt分割成多个分开的参数,后来用eval set -- `getopt -o abcd: -- "$@"`才搞定
回复 支持 反对

使用道具 举报

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

本版积分规则

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