当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 24 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : 如何解决$@参数传递中的空格问题?
帖子发表于 : 2009-09-14 14:07 
头像

注册: 2007-01-20 22:20
帖子: 43
地址: 深圳
送出感谢: 0 次
接收感谢: 0 次
写了一个脚本my_mplayer.sh,用来启动自己定制的mplayer程序,
一般情况下是通过这种方式运行该脚本的:my_mplayer.sh ~/music/*,
我的脚本通过$@将音乐文件名传递给mplayer。
可问题是~/music目录中的有些音乐文件是包含空格的,比如"let it be.mp3",
遇到这样的曲目时,传递给mplayer的歌曲名称似乎就被mplayer理解为了3首:"let", "it", "be.mp3",
自然,这首歌就无法正常播放了。 :em06

请问如何编写脚本才能解决这个问题呢?谢谢!


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 如何解决$@参数传递中的空格问题?
帖子发表于 : 2009-09-14 15:06 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
在脚本里面工作的地方如此写:
for i in $1;do mplayer "$i";done
不行么?


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 如何解决$@参数传递中的空格问题?
帖子发表于 : 2009-09-14 15:22 
头像

注册: 2007-01-20 22:20
帖子: 43
地址: 深圳
送出感谢: 0 次
接收感谢: 0 次
xiooli 写道:
在脚本里面工作的地方如此写:
for i in $1;do mplayer "$i";done
不行么?


你的意思是这样吗?
#! /bin/bash
for file in $@
do
mplayer $file
done

如果是这样的话,似乎还是不能解决文件名中包含空格的问题。
而且,这么做的另一个问题是每次启动mplayer都是传递的单个音乐文件作为参数,没有了列表功能,无法换曲操作。


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 如何解决$@参数传递中的空格问题?
帖子发表于 : 2009-09-14 15:55 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
for i in `ls -1 *.mp3`; do xxx ..... “”“$i”“”; done
一行一个歌曲,去处理,加


_________________
● 鸣学


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 如何解决$@参数传递中的空格问题?
帖子发表于 : 2009-09-14 15:55 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
ls -1 *.mp3|while read i; do xxxx """"$i"""";done


_________________
● 鸣学


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 如何解决$@参数传递中的空格问题?
帖子发表于 : 2009-09-14 16:22 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
ee阿姨貌似很怕冷的样子哦,$i外面裹那么多外套 :em05


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 如何解决$@参数传递中的空格问题?
帖子发表于 : 2009-09-14 16:24 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
3个。。。额,有4个的啊。 :em05


_________________
● 鸣学


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 如何解决$@参数传递中的空格问题?
帖子发表于 : 2009-09-14 16:40 
头像

注册: 2007-01-20 22:20
帖子: 43
地址: 深圳
送出感谢: 0 次
接收感谢: 0 次
eexpress 写道:
3个。。。额,有4个的啊。 :em05


eexpress:你提供的两种方法我都尝试了一下,
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


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 如何解决$@参数传递中的空格问题?
帖子发表于 : 2009-09-14 17:22 
头像

注册: 2007-01-20 22:20
帖子: 43
地址: 深圳
送出感谢: 0 次
接收感谢: 0 次
发现$*包含~/music/目录下的全部歌曲文件名称,而且是没有换行符的。
想通过sed编辑$*的内容,目的是将let it be.mp3这样的曲目名称改成let\ it\ be.mp3这样的格式。
请问sed如何能够直接编辑shell变量内容呢?


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 如何解决$@参数传递中的空格问题?
帖子发表于 : 2009-09-14 18:17 
头像

注册: 2007-12-25 12:51
帖子: 231
送出感谢: 0 次
接收感谢: 0 次
又见到ee的马甲加皮袄了……

简单的方法,并且还能用到nautilus和thunar右键脚本里的:
代码:
IFS=$'\n'
for f in $*; do
    echo "$f"
done


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 如何解决$@参数传递中的空格问题?
帖子发表于 : 2009-09-14 18:51 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
"$@"

就这么简单


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 如何解决$@参数传递中的空格问题?
帖子发表于 : 2009-09-15 10:21 
头像

注册: 2007-01-20 22:20
帖子: 43
地址: 深圳
送出感谢: 0 次
接收感谢: 0 次
c\nc 写道:
又见到ee的马甲加皮袄了……

简单的方法,并且还能用到nautilus和thunar右键脚本里的:
代码:
IFS=$'\n'
for f in $*; do
    echo "$f"
done


太棒了,就是这个效果。
我之前也想到设置IFS,当时是这样用的IFS="\n",结果发现不行。
请问为什么要写成 IFS=$'\n' 呢? :em06


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 如何解决$@参数传递中的空格问题?
帖子发表于 : 2009-09-15 11:40 
头像

注册: 2007-12-25 12:51
帖子: 231
送出感谢: 0 次
接收感谢: 0 次
poplarc 写道:
c\nc 写道:
又见到ee的马甲加皮袄了……

简单的方法,并且还能用到nautilus和thunar右键脚本里的:
代码:
IFS=$'\n'
for f in $*; do
    echo "$f"
done


太棒了,就是这个效果。
我之前也想到设置IFS,当时是这样用的IFS="\n",结果发现不行。
请问为什么要写成 IFS=$'\n' 呢? :em06


如果不用在特殊场合,比如右键脚本什么的,11楼的方法就可以了。

试试这个就知道$'\n'的意思了(bash手册里搜索 $'string' ):
代码:
a=$'\n'; b="\n"
echo "$b$a$b"


页首
 用户资料  
 
14 楼 
 文章标题 : Re: 如何解决$@参数传递中的空格问题?
帖子发表于 : 2009-09-15 12:24 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
难道有人复制了4个"?


_________________
● 鸣学


页首
 用户资料  
 
15 楼 
 文章标题 : Re: 如何解决$@参数传递中的空格问题?
帖子发表于 : 2009-09-15 12:59 
头像

注册: 2007-12-25 12:51
帖子: 231
送出感谢: 0 次
接收感谢: 0 次
eexpress 写道:
难道有人复制了4个"?


看不出你那是几个,眼都花了 :em20


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 24 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译