Chinaunix首页 | 论坛 | 博客
  • 博客访问: 120240
  • 博文数量: 19
  • 博客积分: 329
  • 博客等级: 一等列兵
  • 技术积分: 165
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-10 09:58
文章分类

全部博文(19)

文章存档

2012年(3)

2011年(14)

2009年(2)

分类: LINUX

2011-04-22 18:49:11

今天把一些音乐复制到mp3上,在交互模式下写了一个简单的小脚本,

  1. for file in *; do
  2. if [ -f $file ] ; then
  3. mv $file musics
  4. fi
  5. done

在执行时,出现了问题。
bash: [: 我的: binary operator expected
too many argument

思考一会,顿悟歌曲的名字是中文命名的,而且中间都是夹杂着很多“坏符号”:
空格,引号等等。应该是mv时,出现问题了,第一句的通配符*确实匹配了每个歌曲名,
但是在使用mv的时候,出现了,类似的问题:
mv 千里 之外.mp3 musics
的情况,这种情况肯定是不合适的,shell把它解释成两个文件了。

如果使用*mp3来匹配的话,就不会有问题,因为*mp3是可以匹配空格的,解释时把它
看做正常字符(而不是shell的元字符)。

bash的通配只是对当前的命令有效,对下一个命令就没有什么约束力了,特别是对其中
出现的元字符,当前命令可以把空格解释为正常字符,但是后面的命令就不可以了。

阅读(1226) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~