0

我对 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

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

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

4

1 回答 1

2

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

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

还修复了反引号 - 如果您使用 Bash,强烈建议使用$(). 请注意,命令替换内部和外部的引用上下文不同的,因此外部引号不会影响内部引号。

于 2012-04-30T12:21:30.263 回答