从Bash传递多个参数到Python

9

我有一个短的Python内联脚本,我从Bash脚本中调用它,并希望它处理多个单词的变量(来自$*)。我原以为这只是起作用:

#!/bin/bash

arg="A B C"
python -c "print '"$arg"'"

但事实并非如此:

  File "<string>", line 1
    print 'A
           ^
SyntaxError: EOL while scanning string literal

为什么?

2
python -c "print \"$arg\"" 对我有效。 - Ashwini Chaudhary
2
甚至可以是 python -c "print '$arg'" - Daniel Roseman
2
语法高亮显示了问题 :-) - Paŭlo Ebermann
2个回答

16

BASH脚本有误。

#!/bin/bash

arg="A B C"
python -c "print '$arg'"

并输出

$ sh test.sh 
A B C
注意,要将两个字符串变量连接起来,您不需要将它们放在字符串常量之外。

请注意,要将两个字符串变量连接起来,您不需要将它们放在字符串常量之外。


3
在这里找到了一个很好的关于在Bash中连接字符串的资源:https://dev59.com/0m855IYBdhLWcg3wuG0M - Bhargav Rao

10

我想解释一下为什么你的代码不能正常工作。

你想要做的是:

arg="A B C"
python -c "print '""$arg""'"

输出:

A B C

你的代码问题在于python -c "print '"$arg"'"被shell解析为python -c "print '"A B C"'"。请参考以下内容:

arg="A B C"
python -c "print '"A B C"'"
#__________________^^^^^____

输出:

  File "<string>", line 1
    print 'A

SyntaxError: EOL while scanning string literal
在这里,你会遇到语法错误,因为空格阻止了拼接,所以后面的BC"'"被解释为两个不属于传递给Python解释器作为命令的字符串的一部分的字符串(Python解释器只采用跟随-c的字符串作为命令)。
为更好的理解:
arg="ABC"
python -c "print '"$arg"'"

输出:

ABC

1
很棒的解释兄弟 +1,但你应该早点发布! - Bhargav Rao
你能解释一下为什么 python -c "print '"A B C"'" 会报 SyntaxError 吗?我不太明白。空格会发生什么事情? - Barry
@Barry:当然是的。空格防止串联,因此以下的 BC"'" 被解释为两个不属于作为命令传递给 Python 解释器的字符串的不同字符串(解释器只接受 -c 后面的字符串作为命令)。这样是否更清晰明了? - aldeb
啊!兄弟,你夺走了我的银牌!:( 哈哈,不管怎样,更好的答案当之无愧地获得了它,而你的回答肯定值得被采纳。祝福你一切顺利,加油! - Bhargav Rao
@BhargavRao: 哈哈,真的很抱歉啊兄弟!我不是有意这样做的。只是想给问题加些澄清 :p 我相信并希望你能尽快找回它!非常感谢! - aldeb
没问题,兄弟!正确答案应该在顶部。而且确实如此。这就是 SO 的工作方式。你很快就会获得铜牌的 ;) - Bhargav Rao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接