2012-03-01 20 views
5

Ho uno script Python che emette due numeri in questo modo: 1.0 2.0 (che è uno spazio tra i numeri, ma può essere un \t o qualsiasi altra cosa .Voglio una variabile bash per salvare il 1.0, e un'altra variabile per salvare la 2.0 questo è possibileValori "Piping" in variabili Bash

In passato, ho solo "convogliato" un valore in una variabile in questo modo:.?

var=`python file.py` ; 

ma ora, io sono interessato a salvare due valori dal file python. Concettualmente, simile a:

var1,var2=`python file.py` ; 

Qualche consiglio/aiuto?

Grazie!

risposta

7

si può usare qualcosa di simile:

read var1 var2 < <(python file.py) 

Il funky <() sintassi è chiamato sostituzione di processo.

+0

Questo è molto meglio del mio awk senza senso qui sotto. – zmccord

+0

@Mat: funziona in modo fantastico. Grazie! – Amit

1

L'one-liner che uso per i campi di scissione è

... | awk '{print $1}' | ... # or $2, $3, etc. 

Così si potrebbe fare

var = `foo` 
var1 = `echo "$var" | awk '{print $1}'` 
var2 = `echo "$var" | awk '{print $2}'` 

modificare: aggiunto virgolette intorno $ var

1

Credo che la più efficiente ed elegante la cosa qui sarebbe usare readarray per leggere il valore in una matrice. Questo se stai bene usando gli array, ovviamente. Dovresti essere, ma non lo sai mai. Ciò richiederebbe che il delimitatore sia una newline, però. Comunque:

readarray -t values < <(python file.py)

l'otterranno un array di un elemento per ciascuna linea di uscita dal python file.py con il newline finale rimosso. Dai un'occhiata a man bash per altre opzioni per questo fantastico builtin.