2012-01-03 26 views
8

Estoy escribiendo un script en bash y quiero que ejecute un comando y maneje cada línea por separado. por ejemplo:colocar una salida de varias líneas dentro de una variable

LINES=$(df) 
echo $LINES 

devolverá toda la salida convirtiendo nuevas líneas con espacios.

ejemplo:

si la salida se supone que es:

1 
2 
3 

continuación, me gustaría tener

1 2 3 

cómo puedo poner la salida de un comando en una variable permitiendo nuevo líneas para seguir siendo nuevas líneas así que cuando imprima la variable obtendré la salida adecuada?

Respuesta

11

Generalmente en bash $v está buscando problemas en la mayoría de los casos. Casi siempre lo que realmente quiere decir es "$v" entre comillas dobles.

LINES="`df`"  # double-quote + backtick 
echo "$LINES" 
OLDPATH="$PATH" 
+6

En realidad, ninguna de las asignaciones a variables necesita comillas, porque el resultado de la expansión no se divide en palabras cuando se asigna a la variable. Pero no duelen nada y es más fácil entrenar tu memoria muscular para simplemente escribir comillas dobles en todas las expansiones. –

+0

¡Es bueno saberlo, gracias! – kubanczyk

6

No, no lo hará. El $(something) solo elimina las nuevas líneas finales.

La expansión en el argumento para eco se divide en espacios en blanco y que echo concatena argumentos separados con espacio. Para conservar el espacio en blanco, es necesario citar de nuevo:

echo "$LINES" 

Tenga en cuenta, que la asignación no hace necesidad de ser citado; El resultado de la expansión no está dividido por palabra en la asignación a la variable y en el argumento al case. Pero se puede citar y es más fácil simplemente aprender a poner siempre las comillas.

+0

¿Estás seguro? Obtuve los resultados esperados solo con 'LINES = $ (df); echo "$ {LINES}" ', quizás IFS sea diferente en nuestro entorno. Todavía +1 como '$ (df)' es mejor que las comillas simples de retroceso en la respuesta de @ kubanczyk – nhed

+0

@nhed, ¿por qué mejorar? – kubanczyk

+0

@nhed: Correcto ... la asignación a variable nunca se divide. Me confundí por un mensaje de error que resultó venir de otra cosa cuando lo probé aquí. –

Cuestiones relacionadas