Estoy tratando de usar printf para formatear una salida bonita en un script bash
p.ej:
-----------------------
| This is some output |
-----------------------
Pero me he tropezado con un comportamiento que no entiendo.
$ printf "--"
me da el error printf: usage: printf [-v var] format [arguments]
y
$ printf "-stuff"
resultados en-bash: printf: -s: invalid option
Entonces, aparentemente printf piensa que estoy tratando de pasar algunos argumentos mientras no lo estoy.
Mientras tanto, completamente por accidente, he encontrado esta solución:
$ printf -- "--- this works now ----\n"
me da--- this works now ----
¿Alguien puede explicar este comportamiento?
echo
eso que fallaría al hacerloecho ------------
? La mayoría solo admite-n
(sin línea posterior),-e
(interpreta caracteres con barra invertida) y posible-E
(NO los interpreta) y no genera errores cuando se encuentran otros argumentos similares a las opciones, ¿verdad? (EDITAR: GNU/bin/echo
también es compatible--help
y--version
.)Respuestas:
El
--
se utiliza para indicar al programa que lo que sigue debe no ser interpretado como una línea de comandos opción aprintf
.Editar: por lo tanto, lo
printf "--"
que intentó básicamente terminó como "printf sin argumentos" y, por lo tanto, falló.fuente
--
puedes correrprintf -- --
.printf --
es lo mismo queprintf
(recibes el mismo mensaje)printf -- $fmt
no es portátil. En busybox 1.30.1,printf -- '%s\n' hello
rendimientos--
. Ver también: pubs.opengroup.org/onlinepubs/009695399/utilities/printf.html--
se interpreta como una opción (en este caso, para indicar que no hay más opciones).Siempre se debe incluir una cadena de formato cuando se usa
printf
para evitar una mala interpretación. Para su caso particular:fuente
printf '-%.0s' {1..54}
--
:-)printf -- '-%.0s' {1..54}
Hay diferencias entre printf incorporado y / usr / bin / printf, el segundo hace "lo que quieres decir" sin estos molestos errores.
fuente