分页: 2 / 2

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

发表于 : 2009-09-15 13:15
poplarc
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的方法,$@得到的文件名也会被空格截断的。

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

发表于 : 2009-09-15 13:18
bones7456
多用双引号,就没错

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

发表于 : 2009-09-15 15:06
aerofox
好像只能用IFS的方法,$@得到的文件名也会被空格截断的。
双引号得一直用下去:

代码: 全选

#!/bin/bash
for f in "$@"; do    # <-- 这里有双引号
    file "$f"        # <-- 这里也有双引号
done

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

发表于 : 2009-09-15 15:20
eexpress
搞不懂你们了。直接管道+read。折腾啥哦。
虽然我多打了一个"
不喜欢""",用\'啊。

bash的for,都扩展一切的。较劲干嘛。

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

发表于 : 2009-09-15 15:26
eexpress
另外 mplayer 支持播放列表。你导文件就是。
哎。

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

发表于 : 2009-09-15 15:30
poplarc
eexpress 写了:搞不懂你们了。直接管道+read。折腾啥哦。
虽然我多打了一个"
不喜欢""",用\'啊。

bash的for,都扩展一切的。较劲干嘛。
不太明白。用管道+read应该怎么做?能给个例子吗?或者给些参考资料?谢谢哈。 :em09

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

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

代码: 全选

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

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

代码: 全选

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

代码: 全选

mplayer "$@" "$params"
请问在脚本中写命令行的时候如果涉及到变量的话需要遵循什么特别的格式吗?

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

发表于 : 2009-09-16 13:25
cocoready
使用"$@" 来接受参数,就可以了。

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

发表于 : 2009-09-19 22:43
v2sun.r
学习了,解决了我自己的问题。 :em11