如何解决$@参数传递中的空格问题?
- poplarc
- 帖子: 43
- 注册时间: 2007-01-20 22:20
- 来自: 深圳
如何解决$@参数传递中的空格问题?
写了一个脚本my_mplayer.sh,用来启动自己定制的mplayer程序,
一般情况下是通过这种方式运行该脚本的:my_mplayer.sh ~/music/*,
我的脚本通过$@将音乐文件名传递给mplayer。
可问题是~/music目录中的有些音乐文件是包含空格的,比如"let it be.mp3",
遇到这样的曲目时,传递给mplayer的歌曲名称似乎就被mplayer理解为了3首:"let", "it", "be.mp3",
自然,这首歌就无法正常播放了。
请问如何编写脚本才能解决这个问题呢?谢谢!
一般情况下是通过这种方式运行该脚本的:my_mplayer.sh ~/music/*,
我的脚本通过$@将音乐文件名传递给mplayer。
可问题是~/music目录中的有些音乐文件是包含空格的,比如"let it be.mp3",
遇到这样的曲目时,传递给mplayer的歌曲名称似乎就被mplayer理解为了3首:"let", "it", "be.mp3",
自然,这首歌就无法正常播放了。
请问如何编写脚本才能解决这个问题呢?谢谢!
- xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
- 联系:
Re: 如何解决$@参数传递中的空格问题?
在脚本里面工作的地方如此写:
for i in $1;do mplayer "$i";done
不行么?
for i in $1;do mplayer "$i";done
不行么?
- poplarc
- 帖子: 43
- 注册时间: 2007-01-20 22:20
- 来自: 深圳
Re: 如何解决$@参数传递中的空格问题?
你的意思是这样吗?xiooli 写了:在脚本里面工作的地方如此写:
for i in $1;do mplayer "$i";done
不行么?
#! /bin/bash
for file in $@
do
mplayer $file
done
如果是这样的话,似乎还是不能解决文件名中包含空格的问题。
而且,这么做的另一个问题是每次启动mplayer都是传递的单个音乐文件作为参数,没有了列表功能,无法换曲操作。
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
- 联系:
Re: 如何解决$@参数传递中的空格问题?
ee阿姨貌似很怕冷的样子哦,$i外面裹那么多外套
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- poplarc
- 帖子: 43
- 注册时间: 2007-01-20 22:20
- 来自: 深圳
Re: 如何解决$@参数传递中的空格问题?
eexpress:你提供的两种方法我都尝试了一下,eexpress 写了:3个。。。额,有4个的啊。
ls -1 /home/johnathan/music/*.mp3 | while read i; do mplayer """"$i""""; done
for i in `ls -1 ~/music/*.mp3`; do mplayer “”“$i”“”; done
还是没办法解决歌曲名中包含空格的问题。
另外的一个问题就是如果通过这种方式运行mplayer,那么播放列表功能就用不上了。
我发现如下脚本:
代码: 全选
#! /bin/bash
files=`ls ~/music/*`
for file in $files
do
echo "$file"
done
代码: 全选
#! /bin/bash
for file in $@
do
echo "$file"
done
johnathan@johnathan-dt:~/scripts$ ./script.sh ~/music/*
/home/johnathan/music/21
guns.mp3
/home/johnathan/music/BillyJean.wav
/home/johnathan/music/good
friends.mp3
/home/johnathan/music/let
it
be.wav
/home/johnathan/music/staring
at
the
sun.wav
/home/johnathan/music/WashAway.mp3
- poplarc
- 帖子: 43
- 注册时间: 2007-01-20 22:20
- 来自: 深圳
Re: 如何解决$@参数传递中的空格问题?
发现$*包含~/music/目录下的全部歌曲文件名称,而且是没有换行符的。
想通过sed编辑$*的内容,目的是将let it be.mp3这样的曲目名称改成let\ it\ be.mp3这样的格式。
请问sed如何能够直接编辑shell变量内容呢?
想通过sed编辑$*的内容,目的是将let it be.mp3这样的曲目名称改成let\ it\ be.mp3这样的格式。
请问sed如何能够直接编辑shell变量内容呢?
- c\nc
- 帖子: 231
- 注册时间: 2007-12-25 12:51
- BigSnake.NET
- 帖子: 12522
- 注册时间: 2006-07-02 11:16
- 来自: 廣州
- 联系:
- poplarc
- 帖子: 43
- 注册时间: 2007-01-20 22:20
- 来自: 深圳
Re: 如何解决$@参数传递中的空格问题?
太棒了,就是这个效果。c\nc 写了:又见到ee的马甲加皮袄了……
简单的方法,并且还能用到nautilus和thunar右键脚本里的:代码: 全选
IFS=$'\n' for f in $*; do echo "$f" done
我之前也想到设置IFS,当时是这样用的IFS="\n",结果发现不行。
请问为什么要写成 IFS=$'\n' 呢?
- c\nc
- 帖子: 231
- 注册时间: 2007-12-25 12:51
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- c\nc
- 帖子: 231
- 注册时间: 2007-12-25 12:51
Re: 如何解决$@参数传递中的空格问题?
看不出你那是几个,眼都花了eexpress 写了:难道有人复制了4个"?