string entre aspas printf

Oct 02 2020

Estou tentando criar uma tabela em bash - reuni todos os cabeçalhos em uma var - no entanto, quando imprimo essas strings entre "'s são tratadas como novas colunas e não como uma pelo comando printf

Quando eu passo os mesmos valores diretamente, funciona bem, mas obtenho um comportamento diferente quando 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

Estou claramente entendendo mal algo sobre como minha variável é diferente < some string >e, portanto, resulta no comportamento diferente.

Como obtenho a saída que corresponde à saída 1 ao usar uma variável?

editar: posso ver que a versão var tem as aspas - há uma maneira de passar strings entre aspas para printf como uma variável?

Respostas

7 choroba Oct 02 2020 at 19:08

A variável é expandida antes que o shell execute qualquer comando, ou seja printf, aqui, e a divisão de palavras ocorre após a expansão da variável. Use uma matriz em vez de uma variável escalar:

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