如何解决$@参数传递中的空格问题?

sh/bash/dash/ksh/zsh等Shell脚本
头像
poplarc
帖子: 43
注册时间: 2007-01-20 22:20
来自: 深圳

Re: 如何解决$@参数传递中的空格问题?

#16

帖子 poplarc » 2009-09-15 13:15

c\nc 写了:
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"
好像只能用IFS的方法,$@得到的文件名也会被空格截断的。
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

Re: 如何解决$@参数传递中的空格问题?

#17

帖子 bones7456 » 2009-09-15 13:18

多用双引号,就没错
关注我的blog: ε==3
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 如何解决$@参数传递中的空格问题?

#18

帖子 aerofox » 2009-09-15 15:06

好像只能用IFS的方法,$@得到的文件名也会被空格截断的。
双引号得一直用下去:

代码: 全选

#!/bin/bash
for f in "$@"; do    # <-- 这里有双引号
    file "$f"        # <-- 这里也有双引号
done
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 如何解决$@参数传递中的空格问题?

#19

帖子 eexpress » 2009-09-15 15:20

搞不懂你们了。直接管道+read。折腾啥哦。
虽然我多打了一个"
不喜欢""",用\'啊。

bash的for,都扩展一切的。较劲干嘛。
● 鸣学
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 如何解决$@参数传递中的空格问题?

#20

帖子 eexpress » 2009-09-15 15:26

另外 mplayer 支持播放列表。你导文件就是。
哎。
● 鸣学
头像
poplarc
帖子: 43
注册时间: 2007-01-20 22:20
来自: 深圳

Re: 如何解决$@参数传递中的空格问题?

#21

帖子 poplarc » 2009-09-15 15:30

eexpress 写了:搞不懂你们了。直接管道+read。折腾啥哦。
虽然我多打了一个"
不喜欢""",用\'啊。

bash的for,都扩展一切的。较劲干嘛。
不太明白。用管道+read应该怎么做?能给个例子吗?或者给些参考资料?谢谢哈。 :em09
头像
poplarc
帖子: 43
注册时间: 2007-01-20 22:20
来自: 深圳

Re: 如何解决$@参数传递中的空格问题?

#22

帖子 poplarc » 2009-09-15 15:43

aerofox 写了:
好像只能用IFS的方法,$@得到的文件名也会被空格截断的。
双引号得一直用下去:

代码: 全选

#!/bin/bash
for f in "$@"; do    # <-- 这里有双引号
    file "$f"        # <-- 这里也有双引号
done
额。加了双引号好像"$@"是可以的。

还有一个问题,如果我想通过脚本启动mplayer,脚本里面的命令行像下面这个样子就可以启动mplayer

代码: 全选

mplayer "$@"
但是如果再加上一个非空的变量当做参数,想下面这样,就会提示“Illegal instruction”

代码: 全选

mplayer "$@" "$params"
请问在脚本中写命令行的时候如果涉及到变量的话需要遵循什么特别的格式吗?
cocoready
帖子: 15
注册时间: 2009-08-13 12:11

Re: 如何解决$@参数传递中的空格问题?

#23

帖子 cocoready » 2009-09-16 13:25

使用"$@" 来接受参数,就可以了。
v2sun.r
帖子: 53
注册时间: 2009-09-07 21:21

Re: 如何解决$@参数传递中的空格问题?

#24

帖子 v2sun.r » 2009-09-19 22:43

学习了,解决了我自己的问题。 :em11
______________________________
* PC :HP Compaq CQ45-147TX
* OS:Archlinux

程序员是值得尊敬的,程序员的双手是魔术师的双手。他们把枯燥无味的代码变成丰富多彩的软件…
________
<疯狂的程序员>
回复