我有一个短的Python内联脚本,我从Bash脚本中调用它,并希望它处理多个单词的变量(来自$*
)。我原以为这只是起作用:
#!/bin/bash
arg="A B C"
python -c "print '"$arg"'"
但事实并非如此:
File "<string>", line 1
print 'A
^
SyntaxError: EOL while scanning string literal
为什么?
我有一个短的Python内联脚本,我从Bash脚本中调用它,并希望它处理多个单词的变量(来自$*
)。我原以为这只是起作用:
#!/bin/bash
arg="A B C"
python -c "print '"$arg"'"
但事实并非如此:
File "<string>", line 1
print 'A
^
SyntaxError: EOL while scanning string literal
BASH脚本有误。
#!/bin/bash
arg="A B C"
python -c "print '$arg'"
并输出
$ sh test.sh
A B C
注意,要将两个字符串变量连接起来,您不需要将它们放在字符串常量之外。
请注意,要将两个字符串变量连接起来,您不需要将它们放在字符串常量之外。
我想解释一下为什么你的代码不能正常工作。
你想要做的是:
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
在这里,你会遇到语法错误,因为空格阻止了拼接,所以后面的B
和C"'"
被解释为两个不属于传递给Python解释器作为命令的字符串的一部分的字符串(Python解释器只采用跟随-c
的字符串作为命令)。arg="ABC"
python -c "print '"$arg"'"
输出:
ABC
python -c "print '"A B C"'"
会报 SyntaxError 吗?我不太明白。空格会发生什么事情? - BarryB
和 C"'"
被解释为两个不属于作为命令传递给 Python 解释器的字符串的不同字符串(解释器只接受 -c
后面的字符串作为命令)。这样是否更清晰明了? - aldeb
python -c "print \"$arg\""
对我有效。 - Ashwini Chaudharypython -c "print '$arg'"
。 - Daniel Roseman