OptParse,空白和bash

时间:2012-04-30 12:18:15

标签: python bash echo optparse

我对bash / optparse有一个奇怪的问题。我需要在定义字符串时将字符串传递给我的python脚本。

我使用以下代码:

./lol.py `if [ -n "$URL" ]; then echo -u \"$URL\"; fi`

这里是python脚本:

def main():
    parser = OptionParser()
    parser.add_option("-u", dest="url")
    opts, args = parser.parse_args()
    print opts.url

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

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脚本时
user@fomce02:~$ ./lol.py `if [ -n "$URL" ]; then echo -u "$URL"; fi`
http://lol.com/my

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

你能解释它为什么会发生以及如何让它发挥作用吗?

1 个答案:

答案 0 :(得分:2)

这是因为您发送给脚本的引用是 literal ,而不是语法。这意味着lol.py会收到参数"http://lol.com/myproject/"。如果要将命令的结果作为参数传递,则必须在代码周围使用语法引号:

./lol.py "$(if [ -n "$URL" ]; then echo -u "$URL"; fi)"

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