我对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
它在空格后截断部分字符串。
你能解释它为什么会发生以及如何让它发挥作用吗?
答案 0 :(得分:2)
这是因为您发送给脚本的引用是 literal ,而不是语法。这意味着lol.py
会收到参数"http://lol.com/my
和project/"
。如果要将命令的结果作为单参数传递,则必须在代码周围使用语法引号:
./lol.py "$(if [ -n "$URL" ]; then echo -u "$URL"; fi)"
还修复了反引号 - 如果你正在使用Bash,强烈建议使用$()
。请注意,命令替换内外的quoting context 不同,因此外部引号不会影响内部引号。