Bar*_*rry 9 python string bash command-line-arguments
我有一个简短的内联python脚本,我从一个bash脚本调用,我想让它处理一个多字变量(来自$*
).我希望这只是工作:
#!/bin/bash
arg="A B C"
python -c "print '"$arg"'"
Run Code Online (Sandbox Code Playgroud)
但它没有:
File "<string>", line 1
print 'A
^
SyntaxError: EOL while scanning string literal
Run Code Online (Sandbox Code Playgroud)
为什么?
Bha*_*Rao 16
BASH脚本是错误的.
#!/bin/bash
arg="A B C"
python -c "print '$arg'"
Run Code Online (Sandbox Code Playgroud)
并输出
$ sh test.sh
A B C
Run Code Online (Sandbox Code Playgroud)
请注意,要连接两个字符串变量,您不需要将它们放在字符串常量之外
Sam*_*uns 10
我想解释一下为什么你的代码不起作用.
你想要做的是:
arg="A B C"
python -c "print '""$arg""'"
Run Code Online (Sandbox Code Playgroud)
输出:
A B C
Run Code Online (Sandbox Code Playgroud)
您的代码问题python -c "print '"$arg"'"
是python -c "print '"A B C"'"
由shell 解析的.看到这个:
arg="A B C"
python -c "print '"A B C"'"
#__________________^^^^^____
Run Code Online (Sandbox Code Playgroud)
输出:
File "<string>", line 1
print 'A
SyntaxError: EOL while scanning string literal
Run Code Online (Sandbox Code Playgroud)
这里你得到一个语法错误,因为空格阻止连接,所以下面的B
和C"'"
被解释为两个不同的字符串,不是作为命令传递给python解释器的字符串的一部分(它只接受字符串-c
作为命令).
为了更好地理解:
arg="ABC"
python -c "print '"$arg"'"
Run Code Online (Sandbox Code Playgroud)
输出:
ABC
Run Code Online (Sandbox Code Playgroud)