2012-03-01 7 views
5

Tengo un script de Python que genera dos números como 1.0 2.0 (es un espacio entre los números, pero puede ser \t, o lo que sea. Quiero una variable bash para guardar el 1.0, y otra variable para guardar el 2.0 Es esto posibleValores de "tubería" en las variables de Bash

En el pasado, sólo he "toqué" un valor en una variable de este modo:.?

var=`python file.py` ; 

pero ahora, estoy interesado en guardar dos valores del archivo python. Conceptualmente, similar a:

var1,var2=`python file.py` ; 

¿Algún consejo/ayuda?

Gracias!

Respuesta

7

se puede usar algo como esto:

read var1 var2 < <(python file.py) 

La sintaxis cobarde <() se llama sustitución proceso.

+0

Esto es mucho mejor que mi tontería awk a continuación. – zmccord

+0

@Mat: Funciona fantásticamente. ¡Gracias! – Amit

1

La sola línea que utilizo para cuerpo de descomposición es

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

por lo que podría hacer

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

de edición: añadido comillas alrededor de $ var

1

supongo que el más eficiente y elegante Lo que aquí sería utilizar readarray para leer el valor en una matriz. Eso es si estás bien con el uso de matrices, por supuesto. Deberías serlo, pero nunca se sabe. Sin embargo, esto requeriría que el delimitador fuera una nueva línea. De todos modos:

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

le conseguirá una matriz de un elemento por cada línea de salida por el python file.py con el salto de línea final eliminado. Echa un vistazo a man bash para ver otras opciones para esta genial construcción interna.

Cuestiones relacionadas