stringa quotata printf

Oct 02 2020

Sto cercando di creare una tabella in bash - ho raccolto tutte le intestazioni in una var - tuttavia quando stampo queste stringhe racchiuse tra "s vengono trattate come nuove colonne e non come una sola dal comando printf

Quando passo direttamente gli stessi valori funziona bene, ma ottengo un comportamento diverso quando utilizzo $ 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

Sto chiaramente fraintendendo qualcosa su come la mia variabile è diversa < some string >e quindi si traduce in un comportamento diverso.

Come ottengo l'output che corrisponde all'output 1 quando utilizzo una variabile?

modifica: posso vedere che la versione var ha le virgolette: c'è un modo per passare le stringhe tra virgolette a printf come variabile?

Risposte

7 choroba Oct 02 2020 at 19:08

La variabile viene espansa prima che la shell esegua qualsiasi comando, cioè printfqui, e la suddivisione delle parole avviene dopo l'espansione della variabile. Usa un array invece di una variabile scalare:

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