|
发表于 2009-10-18 07:28:14
|
显示全部楼层
Post by wubo;2037550
小弟最近在编写shell脚本的时候遇到了一个棘手的问题,我想把调用的程序名赋予一个变量cmd, 参数和文件名赋予一个变量cmdarg,为了要处理带空格的文件名,我想把变量cmdarg用双引号括起来:
比如:mplayer -ao oss 1 1.mp3这个命令(这个1 1.mp3是一个带空格的文件名),
我定义
cmd="mplayer"
cmdarg="-ao oss 1 1.mp3"
然后运行 $cmd $cmdarg, 系统会提示:can't find 1.mp3,因为前面的1被忽略掉了,
如果我运行 $cmd "$cmdarg",系统会提示:Error parsing option on the command line: -ao oss 1 1.MP3
连字符的参数被忽略掉了。
因为实际脚本中需要处理参数和文件名混在一起的复杂情况,所以不太好把参数和文件名区别开,分别定义为不同的变量,
请教大家有没有好的方法,既可以识别文件名中的空格,又可以不对连字符-产生影响谢谢. 这是mplayer的问题。
cmdarg1=(-ao oss "1 1.mp3")
$cmd “${cmdarg1[@]}”试试
分离文件名在技术上总是可以做到的。
可以将所有的变量放到数组去,赋值的时候对变量加上引号,在数组中的参数是可以代空格的。 |
|