LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2151|回复: 24

怎样才能保留住命令行参数的双引号?

[复制链接]
发表于 2006-2-24 15:07:31 | 显示全部楼层 |阅读模式
比如执行
./1.sh arg1 arg2 "arg3"

在1.sh中, 如果echo $3的话, 是arg3.
怎么才能保留住参数的双引号?

谢谢高人指教!
发表于 2006-2-24 15:15:26 | 显示全部楼层
Post by pavin
比如执行
./1.sh arg1 arg2 "arg3"

在1.sh中, 如果echo $3的话, 是arg3.
怎么才能保留住参数的双引号?

谢谢高人指教!


backslash
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-24 15:29:41 | 显示全部楼层
不好意思,不太明白你的意思.
我是说, 比如在命令行输入参数的时候是 "abc"
怎么才能在shell里面得到 "abc", 而不是 abc

你说的backslash, 是在哪里做backslash? 能不能说明白点啊
回复 支持 反对

使用道具 举报

发表于 2006-2-24 15:36:41 | 显示全部楼层
Post by pavin
不好意思,不太明白你的意思.
我是说, 比如在命令行输入参数的时候是 "abc"
怎么才能在shell里面得到 "abc", 而不是 abc

你说的backslash, 是在哪里做backslash? 能不能说明白点啊


在命令行中


  1. ./1.sh arg1 arg2 "arg3"
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-24 15:46:27 | 显示全部楼层
呵呵,你这样是可以.
但是,我希望的是在命令行里只输入 "arg3"

我之所以有这个需要,是因为我想在shell里执行一个程序, 比如说cvs.
cvs ci -m "abc" 1.c

我希望执行 ./1.sh cvs ci -m "abc" 1.c
然后在shell里面,可以得到 cvs ci -m "abc" 1.c 这个字符串.
回复 支持 反对

使用道具 举报

发表于 2006-2-24 16:06:54 | 显示全部楼层
Post by pavin
呵呵,你这样是可以.
但是,我希望的是在命令行里只输入 "arg3"

我之所以有这个需要,是因为我想在shell里执行一个程序, 比如说cvs.
cvs ci -m "abc" 1.c

我希望执行 ./1.sh cvs ci -m "abc" 1.c
然后在shell里面,可以得到 cvs ci -m "abc" 1.c 这个字符串.


为什么要这样呢:ask
回复 支持 反对

使用道具 举报

发表于 2006-2-24 16:11:06 | 显示全部楼层
好象挺难的!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-24 16:17:37 | 显示全部楼层
我想写一个叫cvs的脚本, 在这个脚本里面, 先把要check in的文件做一些格式的转换, 然后还是执行系统的cvs二进制程序.

希望达到的目的就是, 当我用自己的cvs脚本替换原有的cvs程序后,用户还是可以象以前使用cvs命令一样. 比如:
原来要check in 一个 test.c文件, 会执行
cvs ci -m "comments" test.c

我希望写一个cvs的脚本后, 用户照样执行
cvs ci -m "comments" test.c
但是,这里的cvs是自己写的脚本. 在它里面, 先把test.c格式化, 然后调用
系统的cvs命令.

所以说,如果我不能把类似 "comments" 的双引号保留下来的话, 我就必需parse所有cvs可能的option. 那就太麻烦了.

不知道说清楚了没有
回复 支持 反对

使用道具 举报

发表于 2006-2-24 18:40:52 | 显示全部楼层
试试这个:"$@"
回复 支持 反对

使用道具 举报

发表于 2006-2-24 18:54:42 | 显示全部楼层
Post by pavin
我想写一个叫cvs的脚本, 在这个脚本里面, 先把要check in的文件做一些格式的转换, 然后还是执行系统的cvs二进制程序.

希望达到的目的就是, 当我用自己的cvs脚本替换原有的cvs程序后,用户还是可以象以前使用cvs命令一样. 比如:
原来要check in 一个 test.c文件, 会执行
cvs ci -m "comments" test.c

我希望写一个cvs的脚本后, 用户照样执行
cvs ci -m "comments" test.c
但是,这里的cvs是自己写的脚本. 在它里面, 先把test.c格式化, 然后调用
系统的cvs命令.

所以说,如果我不能把类似 "comments" 的双引号保留下来的话, 我就必需parse所有cvs可能的option. 那就太麻烦了.

不知道说清楚了没有


这个和有无双引号没有关系,你的comments应该是你的描述,那么就是字符串,何必执着于要quote呢,在脚本里直接用$3不就可以了
回复 支持 反对

使用道具 举报

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

本版积分规则

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