将多个args从bash传递给python

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)

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

  • 在这里找到一个关于连接字符串的好资源http://stackoverflow.com/questions/4181703/how-can-i-concatenate-string-variables-in-bash (3认同)

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)

这里你得到一个语法错误,因为空格阻止连接,所以下面的BC"'"被解释为两个不同的字符串,不是作为命令传递给python解释器的字符串的一部分(它只接受字符串-c作为命令).

为了更好地理解:

arg="ABC"
python -c "print '"$arg"'"
Run Code Online (Sandbox Code Playgroud)

输出:

ABC
Run Code Online (Sandbox Code Playgroud)