J'essaie d'utiliser printf pour formater une jolie sortie dans un script bash
par exemple:
-----------------------
| This is some output |
-----------------------
Mais je suis tombé sur un comportement que je ne comprends pas.
$ printf "--"
me donne l'erreur printf: usage: printf [-v var] format [arguments]
et
$ printf "-stuff"
aboutit à-bash: printf: -s: invalid option
Donc, apparemment, printf pense que j'essaie de passer des arguments alors que je ne le suis pas.
En attendant, complètement par accident, j'ai trouvé cette solution de contournement:
$ printf -- "--- this works now ----\n"
me donne--- this works now ----
Quelqu'un peut-il expliquer ce comportement?
echo
qui échoueraientecho ------------
? La plupart ne prennent en charge que-n
(pas de nouvelle ligne),-e
(interpréter les caractères avec une barre oblique inversée) et possible-E
(ne PAS les interpréter) et ne pas se tromper lorsque d'autres arguments de type option sont rencontrés, n'est-ce pas? (EDIT: GNU/bin/echo
supporte également--help
et--version
.)Réponses:
Le
--
est utilisé pour indiquer au programme que tout ce qui suit devrait pas être interprété comme une ligne de commande l' option pourprintf
.Edit: Ainsi,
printf "--"
vous avez essentiellement essayé "printf sans arguments" et donc échoué.la source
--
vous pouvez courirprintf -- --
.printf --
est le même queprintf
(vous recevez le même message)printf -- $fmt
n'est pas portable. Sur busybox 1.30.1,printf -- '%s\n' hello
rendements--
. Voir aussi: pubs.opengroup.org/onlinepubs/009695399/utilities/printf.html--
est interprété comme une option (dans ce cas, pour signifier qu'il n'y a plus d'options).Une chaîne de format doit toujours être incluse lors de l’utilisation
printf
pour éviter une mauvaise interprétation. Pour votre cas particulier:la source
printf '-%.0s' {1..54}
--
:-)printf -- '-%.0s' {1..54}
Il existe des différences entre printf builtin et / usr / bin / printf, le second fait "ce que vous voulez dire" sans ces erreurs gênantes.
la source