有程序aaaa 参数为 --add "aa bb"
现需要将所有参数用变量代替程序如下:
temp="--add "aa bb""
aaaa $temp
提示参数出错bb"
手工执行aaaa --add "aa bb" 可以
需要这么转换???
to houf2000:
很明显,你的程序aaaa需要两个参数,一个是--add($1) 一个是aa bb ($2)
因为aa bb中间含空格,shell会解释成两个参数,所以加""
而你使用替换的时候,shell对命令行的解释工作便只作了变量替换,你的程序便获得了
三个参数:--add($1) ,"aa ($2) ,bb"($3
个人认为,一个好的程序在考虑用户输入的时候,应该具体些.
比如说:考虑三个参数
或考虑使用特殊字符间隔两个参数,如
aaaa --add aa#bb
非常感谢斑竹,可我的程序比较特殊,可能输入多组参数:例如;
aaaa --add "aa bb" --add "cc dd" --add "ff"
因为参数不确定,总需要得到一个参数字符串,而对这个串进行
操作时就会出现斑竹所说的认为多参数的情况,用“ 的目的就是这个,
没有别的办法在参数中带有空格吗?望指教
在参数间加空格是一个问题,而shell运行变量替代是另一个问题.
如果单纯是加空格,用" " 和都可以.
而要让shell做完变量替换在做一次对""和的处理便做不到了.
通常在其它情况下我们用eval,在这好像也不适用啊.
如果你有aaaa的源码,还是把它改了吧.在c里把#替换成空格不是很简单么?
(出处:http://www.sheup.com)