首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OptParse、空格和bash

OptParse、空格和bash
EN

Stack Overflow用户
提问于 2012-04-30 20:18:15
回答 1查看 941关注 0票数 0

我对bash / optparse有一个奇怪的问题。当定义了string时,我需要将string传递给我的python脚本。

我使用以下代码:

代码语言:javascript
复制
./lol.py `if [ -n "$URL" ]; then echo -u \"$URL\"; fi`

下面是python脚本:

代码语言:javascript
复制
def main():
    parser = OptionParser()
    parser.add_option("-u", dest="url")
    opts, args = parser.parse_args()
    print opts.url

当我测试我的bash表达式时,它似乎正在工作:

代码语言:javascript
复制
user@fomce02:~$ URL="http://lol.com/my project/"
user@fomce02:~$ echo `if [ -n "$URL" ]; then echo -u \"$URL\"; fi`
-u "http://lol.com/my project/"

但是,当我运行带有参数的python脚本时

代码语言:javascript
复制
user@fomce02:~$ ./lol.py `if [ -n "$URL" ]; then echo -u "$URL"; fi`
http://lol.com/my

它在空格后截断字符串的一部分。

你能解释一下为什么会发生这种情况,以及如何让它工作吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-30 20:21:30

这是因为您发送到脚本的引用是字面上的,而不是语法上的。这意味着lol.py接收参数"http://lol.com/myproject/"。如果您希望将命令的结果作为单个参数传递,则必须在代码两边使用语法引号:

代码语言:javascript
复制
./lol.py "$(if [ -n "$URL" ]; then echo -u "$URL"; fi)"

还修复了反引号-如果你使用Bash,强烈建议使用$()。请注意,命令替换内部和外部的quoting context是不同的,因此不会有外引号影响内引号的危险。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10383579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档