2009-01-20 10 views
6

Quiero imprimir una lista en pantalla de forma legible. Utilizo un ciclo para recorrer cada elemento y hacer una nueva lista que está formateada con comas y líneas nuevas. El problema es que en la primera línea de la salida, quiero un título. Por ejemplo, quiero imprimir algo como esto:Creación de texto sangrado con bash

List: red, green, blue, black, cars, 
     busses, ... 

El problema es crear la sangría en la segunda y siguientes líneas. Quiero que la sangría sea de una longitud determinada. Por lo tanto, el problema se reduce a crear una línea vacía de una longitud determinada. Es decir, quiero una función, create_empty_line_of_length, que genera la cantidad de espacios dada.

length=5 
echo "start:$(create_empty_line_of_length $length) hello" 

La salida debe ser en este caso:

start:  hello 

¿Alguien sabe cómo hacer esto?

Respuesta

6

Será

yes ' ' | head -7 | tr -d '\n' 

Cambio '7' en su número.

Tal vez debería echar un vistazo a

man fmt 

también.

9
printf '%7s' 

Probablemente la forma más eficiente de hacerlo.

Es un shell incorporado la mayor parte del tiempo, y si no es/usr/bin/printf existe como una alternativa de coreutils.

por lo

printf '%7s%s\n%7s%s\n' '_' 'hello' '_' 'world' 

produce

 _hello 
     _world 

(utilicé _ en lugar de espacio aquí, pero el espacio también funciona porque fiesta entiende '')

+0

¿No debería haber siete '_ en frente de' hola 'y' mundo '? Gracias de todas formas. Funcionó :) –

+0

Nah, "% 7s" es una regla de alineación pura, dice "tomar una cadena, y alinearla a la derecha con la posición 7, es decir: solo creará espacio. '% 2s' 'hello world' no agregue cualquier espacio, porque "hola mundo" es más grande que 2, pero '% 40s \ n% 40s \ n' 'hola' 'mundo' alineará correctamente hola y mundo con pos 40 –

+0

¡Oh, gracias! ¡Eso es útil! –

Cuestiones relacionadas