printf chaîne entre guillemets
J'essaye de créer une table dans bash - j'ai rassemblé tous les en-têtes dans une var - cependant quand j'imprime ces chaînes entourées de "s sont traitées comme de nouvelles colonnes et non comme une seule par la commande printf
Lorsque je transmets directement les mêmes valeurs, cela fonctionne bien, mais j'obtiens un comportement différent lorsque j'utilise $ var à la place.
$ 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
Je ne comprends clairement pas en quoi ma variable est différente < some string >et entraîne donc un comportement différent.
Comment obtenir la sortie qui correspond à la sortie 1 lors de l'utilisation d'une variable?
edit: Je peux voir que la version var a les guillemets - y a-t-il un moyen de passer des chaînes entre guillemets à printf en tant que variable?
Réponses
La variable est développée avant que le shell n'exécute une commande, c'est-à-dire printfici, et la division des mots se produit après l'expansion de la variable. Utilisez un tableau au lieu d'une variable scalaire:
values=('some spaced words' other values)
printf %-20s "${values[@]}"