当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 9 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : shell 脚本参数空格问题
帖子发表于 : 2010-12-03 11:57 
头像

注册: 2008-07-30 23:21
帖子: 13427
地址: freebuilder@yeah.net
系统: Debian stable AMD64
送出感谢: 38
接收感谢: 128
代码:
#!/bin/sh
VIMRC=/etc/vimide/vimrc
vim -u "$VIMRC" $@

若系统传递给该脚本的某个文件名中含有空格,再经 $@ 这么一传就变成了两个参数了。
我要的效果是
vim -u "$VIMRC" "$1" "$2" ...


_________________
(2015-11-16 更新)适合 WM 的截图脚本
(2015-08-24 更新)Debian、Ubuntu 源列表说明
(2013-02-01 首发)文字如何绘出
▷▷ 【更 多 在 此】 ◁◁
箪食瓢饮随遇安,不求栋梁求参天。
【初韵】一门牛逼的编程语言。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: shell 脚本参数空格问题
帖子发表于 : 2010-12-03 12:13 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
bash dash。。都会对参数解释,去掉各种“引号等。
基本只按照空格处理。
你可以使用''包括参数。脚本里面取的后,传给其他软件的时候,还要''包裹一次。


_________________
● 鸣学


页首
 用户资料  
 
3 楼 
 文章标题 : Re: shell 脚本参数空格问题
帖子发表于 : 2010-12-03 20:24 

注册: 2008-05-24 8:30
帖子: 1453
送出感谢: 2
接收感谢: 30
把 $@ 加上双引号就是了:"$@"


页首
 用户资料  
 
4 楼 
 文章标题 : Re: shell 脚本参数空格问题
帖子发表于 : 2010-12-04 10:26 
头像

注册: 2009-01-11 21:38
帖子: 198
送出感谢: 0 次
接收感谢: 0 次
把带空格的参数用 "" 引起来
代码:
./yourscript "my file" "my file1"

$@也要用 "" 引起来才行


_________________
以缺德服人......


页首
 用户资料  
 
5 楼 
 文章标题 : Re: shell 脚本参数空格问题
帖子发表于 : 2010-12-04 17:14 
头像

注册: 2008-07-30 23:21
帖子: 13427
地址: freebuilder@yeah.net
系统: Debian stable AMD64
送出感谢: 38
接收感谢: 128
eexpress 写道:
bash dash。。都会对参数解释,去掉各种“引号等。
基本只按照空格处理。
你可以使用''包括参数。脚本里面取的后,传给其他软件的时候,还要''包裹一次。

当参数传递给脚本的时候,该解析的已经解析了,问题就在于 $@ 引用的是不带引号的众参数。文档虽然说
引用:
if $1 is “abc” and $2 is “def ghi”, then "$@" expands to the two arguments:
"abc" "def ghi"

但实际上
代码:
$@ 得到
abc def ghi
"$@" 得到
"abc def ghi"

实际点的就是,在 shell 敲这样一条命令
代码:
vimide "my main.c" "makefile"

这个交互式 shell 没有任何问题,把两个参数传给了 vimide 脚本。但通过脚本后就成了这样一条命令
代码:
vim -u /etc/vimide/vimrc my main.c makefile

传给 vim 的,成了三个文件。若把 $@ 用引号引起来,那样一样有问题,得到了
代码:
vim -u /etc/vimide/vimrc "my main.c makefile"

好家伙!成一个文件了。

用 C 语言写个程序代替 vimide 脚本很简单地解决了,但没找到 shell 的解决方法。


_________________
(2015-11-16 更新)适合 WM 的截图脚本
(2015-08-24 更新)Debian、Ubuntu 源列表说明
(2013-02-01 首发)文字如何绘出
▷▷ 【更 多 在 此】 ◁◁
箪食瓢饮随遇安,不求栋梁求参天。
【初韵】一门牛逼的编程语言。


页首
 用户资料  
 
6 楼 
 文章标题 : Re: shell 脚本参数空格问题
帖子发表于 : 2010-12-05 19:43 

注册: 2008-10-31 22:12
帖子: 6546
系统: 践兔
送出感谢: 18
接收感谢: 25
楼上,你自己试试。就知道了。
代码:
sh-4.1$ set a b 'c d e'
sh-4.1$ for i in $@ ; do echo "$i" ; done
a
b
c
d
e
sh-4.1$ for i in "$@" ; do echo "$i" ; done
a
b
c d e
sh-4.1$

纯属不实践的。


_________________
代码:
] ls -ld //


页首
 用户资料  
 
7 楼 
 文章标题 : Re: shell 脚本参数空格问题
帖子发表于 : 2010-12-05 19:46 

注册: 2008-10-31 22:12
帖子: 6546
系统: 践兔
送出感谢: 18
接收感谢: 25
实际上,
如果参数是"a" "b" "c d e"

$* 会返回 a b c d e
"$*" 会返回 "a b c d e"
不要把$*和$@搞混了。


_________________
代码:
] ls -ld //


页首
 用户资料  
 
8 楼 
 文章标题 : Re: shell 脚本参数空格问题
帖子发表于 : 2010-12-06 19:41 
头像

注册: 2008-07-30 23:21
帖子: 13427
地址: freebuilder@yeah.net
系统: Debian stable AMD64
送出感谢: 38
接收感谢: 128
理论上是可行的,别人的也可行,就自己的不行。我只能说是灵异了,和下面这种问题一样,除了重装系统,没办法解决。
viewtopic.php?f=70&t=302465


_________________
(2015-11-16 更新)适合 WM 的截图脚本
(2015-08-24 更新)Debian、Ubuntu 源列表说明
(2013-02-01 首发)文字如何绘出
▷▷ 【更 多 在 此】 ◁◁
箪食瓢饮随遇安,不求栋梁求参天。
【初韵】一门牛逼的编程语言。


页首
 用户资料  
 
9 楼 
 文章标题 : Re: shell 脚本参数空格问题
帖子发表于 : 2010-12-06 22:53 

注册: 2008-05-24 8:30
帖子: 1453
送出感谢: 2
接收感谢: 30
跟重装没有任何关系。
行不行别空口说,把代码和输入、输出结果原封不动地贴出来看看。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 9 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

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


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

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

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