我对bash / optparse有一个奇怪的问题。当定义了string时,我需要将string传递给我的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它在空格后截断字符串的一部分。
你能解释一下为什么会发生这种情况,以及如何让它工作吗?
发布于 2012-04-30 20:21:30
这是因为您发送到脚本的引用是字面上的,而不是语法上的。这意味着lol.py接收参数"http://lol.com/my和project/"。如果您希望将命令的结果作为单个参数传递,则必须在代码两边使用语法引号:
./lol.py "$(if [ -n "$URL" ]; then echo -u "$URL"; fi)"还修复了反引号-如果你使用Bash,强烈建议使用$()。请注意,命令替换内部和外部的quoting context是不同的,因此不会有外引号影响内引号的危险。
https://stackoverflow.com/questions/10383579
复制相似问题