2015-04-20 18 views
8

Ich habe ein kurzes Inline-Python-Skript, das ich von einem Bash-Skript aufrufen, und ich möchte, dass es eine Mehrwort-Variable behandeln (die von $* stammt). Ich erwartete dies nur Arbeit:Übergeben Sie mehrere Argumente von Bash in Python

#!/bin/bash 

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

aber es funktioniert nicht:

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

Warum?

+2

'python -c "print \" $ arg \ ""' Arbeiten für mich. –

+2

oder sogar 'python -c" print '$ arg' "' –

+2

Die Syntaxhervorhebung zeigt das Problem :-) –

Antwort

10

Ich mag würde erklären, warum der Code nicht Arbeit.

Was wollten Sie tun, ist, dass:

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

Ausgang:

A B C 

Das Problem des Codes ist, dass python -c "print '"$arg"'" als python -c "print '"A B C"'" von der Shell analysiert wird. Siehe dazu:

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

Ausgang:

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

SyntaxError: EOL while scanning string literal 

Hier können Sie einen Syntaxfehler, weil die Räume Verkettung verhindern, so dass die folgenden B und C"'" werden als zwei verschiedene Strings interpretiert, die nicht Teil des Strings sind Wird als Befehl an den Python-Interpreter übergeben (der nur die Zeichenfolge -c als Befehl verwendet).

Zum besseren Verständnis:

arg="ABC" 
python -c "print '"$arg"'" 

Ausgang:

ABC 
+1

Awsome Erklärung Bro +1, aber Sie schüchtern haben es ein wenig früh geschrieben! –

+0

Macht nichts: p Froh, dass ich helfen könnte! –

+0

Kannst du erklären, warum 'python -c" print "" A B C "'" 'einen SyntaxError liefert? Ich bin mir nicht sicher, ob ich folge. Was passiert mit den Räumen? – Barry

16

Das BASH-Skript ist falsch.

#!/bin/bash 

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

Und Ausgang

$ sh test.sh 
A B C 

Beachten Sie, dass zwei String-Variablen verketten Sie nicht brauchen, sie außerhalb der Zeichenfolge zu setzen Konstanten

+3

Gefunden eine nette Ressource auf Verkettung Strings hier http://StackOverflow.com/Questions/4181703/how-can- i-concatenate-string-variables-in-bash –

Verwandte Themen