LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: atixujie

请教大虾,shell怎么把参数加引号?

[复制链接]
发表于 2006-4-3 16:52:47 | 显示全部楼层
那你把该去掉shell特殊含义的字符前面加上\ escape掉,空格被当成分隔符也escape掉
象这样
\"C:\\program\ file\\peng\"

最简单的直接把你给windows的C程序拿到unix上编译一遍不就得了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-4 14:19:34 | 显示全部楼层
不行,最终的目的是将正确的参数传给JAVA程序去识别,你要告诉JAVA,c:\program file是一个参数,所以如果用“c:\program file“不行(有空格就变成两个了),用单引号再加“c:\program file“也是不行的,那样会分别把“c:\program file“传2次成了两个参数“c:\program和file“,也是不行的。

我的c程序当然不能在unix下用了,里面调用了windows .h 等等很多unix系统没有的库函数,否则就不用费劲了。

  所以问题的症结就是在一个参数中有空格的时候,使SHELL如何将其认为是一个参数整体来传给别的程序????我考虑了数组,以及$*,$@,等等都试过了,都是不行的。不知该怎么办了。
谢谢关注。

Post by 1ball
那你把该去掉shell特殊含义的字符前面加上\ escape掉,空格被当成分隔符也escape掉
象这样
\"C:\\program\ file\\peng\"

最简单的直接把你给windows的C程序拿到unix上编译一遍不就得了
回复 支持 反对

使用道具 举报

发表于 2006-4-6 23:45:02 | 显示全部楼层
try this:
  1. -outfile '"c:\\program\ file\\peng"'
复制代码
回复 支持 反对

使用道具 举报

发表于 2006-4-8 16:11:43 | 显示全部楼层
Post by atixujie
不行,最终的目的是将正确的参数传给JAVA程序去识别,你要告诉JAVA,c:\program file是一个参数,所以如果用“c:\program file“不行(有空格就变成两个了),用单引号再加“c:\program file“也是不行的,那样会分别把“c:\program file“传2次成了两个参数“c:\program和file“,也是不行的。

我的c程序当然不能在unix下用了,里面调用了windows .h 等等很多unix系统没有的库函数,否则就不用费劲了。

  所以问题的症结就是在一个参数中有空格的时候,使SHELL如何将其认为是一个参数整体来传给别的程序????我考虑了数组,以及$*,$@,等等都试过了,都是不行的。不知该怎么办了。
谢谢关注。


shell里只要参数被括以引号,无论单双,参数内的空格都不会被翻译成分割符,而被整个理解成单个参数传给程序。关键不仅shell命令行里要如此处理,并且你的脚本里也处理参数时也要同样用引号括起来,比如"$1"而不是$1。这样才能保证参数从命令行传到shell脚本,再到java都不被空格分隔。

Commandstr="$Commandstr $1"
我看你这一句就有问题,参数就是在这里被空格分隔。
我建议改成这样试试
commandstr="$commandstr" "$1"
以后再引用commandstr的时候就不要加引号了,直接$commandstr

另外你的C程序当初写的时候就应该考虑到移植性。尽量不用少用操作系统特别的库
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表