printf cadena entre comillas

Oct 02 2020

Estoy tratando de crear una tabla en bash; he recopilado todos los encabezados en una var; sin embargo, cuando imprimo, estas cadenas encerradas entre "se tratan como nuevas columnas y no como una por el comando printf

Cuando paso los mismos valores directamente, funciona bien, pero obtengo un comportamiento diferente cuando uso $ var.

$ printf '%-20s' "some spaced words" other values; echo -e "\n"
some spaced words   other               values

$ values='"some spaced words" other values' $ echo $values "some spaced words" other values $ printf '%-20s' $values; echo -e "\n"
"some               spaced              words"              other               values

Claramente estoy malinterpretando algo sobre cómo mi variable es diferente < some string >y, por lo tanto, da como resultado un comportamiento diferente.

¿Cómo obtengo la salida que coincide con la salida 1 cuando uso una variable?

editar: puedo ver que la versión var tiene las comillas - ¿hay alguna forma de pasar cadenas entre comillas a printf como una variable?

Respuestas

7 choroba Oct 02 2020 at 19:08

La variable se expande antes de que el shell ejecute cualquier comando, es decir printf, aquí, y la división de palabras ocurre después de la expansión de la variable. Utilice una matriz en lugar de una variable escalar:

values=('some spaced words' other values)
printf %-20s "${values[@]}"