2015-04-20 19 views
8

Ho un breve script python in linea che chiamo da uno script bash, e voglio averlo gestire una variabile multi-word (che viene da $*). Mi aspettavo questo a poco lavoro:Passare più argomenti da bash in python

#!/bin/bash 

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

ma non è così:

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

Perché?

+2

'python -c "print \" $ arg "'funziona per me \". –

+2

o anche 'python -c" stampa '$ arg' "' –

+2

L'evidenziazione della sintassi mostra il problema :-) –

risposta

10

vorrei spiegare il motivo per cui il codice non lo fa lavoro.

Cosa si voleva fare è che:

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

uscita:

A B C 

Il problema del codice è che python -c "print '"$arg"'" viene analizzato come python -c "print '"A B C"'" dalla shell. Vedere questo:

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

uscita:

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

SyntaxError: EOL while scanning string literal 

Qui si ottiene un errore di sintassi perché gli spazi impediscono di concatenazione, quindi il seguente B e C"'" sono interpretati come due stringhe differenti che non fanno parte della stringa passato come un comando all'interprete python (che accetta solo la stringa che segue il comando -c).

Per una migliore comprensione:

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

uscita:

ABC 
+1

Una spiegazione stupenda interrompe +1, ma lo hai già postato un po 'presto! –

+0

Non importa: p Glad I could help! –

+0

Puoi chiarire perché 'python -c 'print'" A B C "'" "restituisce un SyntaxError? Non sono sicuro di seguirlo. Cosa succede agli spazi? – Barry

16

Lo script BASH è errato.

#!/bin/bash 

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

E uscita

$ sh test.sh 
A B C 

Si noti che per concatenare due variabili stringa non è necessario metterli fuori della stringa costanti

+3

Trovato una bella risorsa sul concatenamento delle stringhe qui http://stackoverflow.com/questions/4181703/how-can- i-concatenate-string-variables-in-bash –

Problemi correlati