La útil respuesta de John1024 proporciona una solución genérica que muestra cómo eliminar la ambigüedad de las opciones de los operandos para todos Utilidades similares a POSIX.
En el caso que nos ocupa, la solución más sencilla es (funciona no solo en bash
, pero también en ksh
y zsh
):
printf '%.0s-' {1..100}
Colocando %.0s
antes el -
evita el problema de un -
inicial ser confundido con una opción.
Ligeramente optimizado:
printf '%.s-' {1..100}
Recomendaría usar un for
tradicional loop, ya que no hay necesidad de generar subprocesos o expandir 100 argumentos:
N=100
for((i = 0; i < $N; ++i)); do
printf -
done
Es curioso que printf -%s
desencadena "opción no válida" pero printf -
no es. Quizás para estar más seguro, podrías hacer printf %s -
.
Usa un for
bucle y rango de números:
for i in {1..10};
do echo "-";
done
O en una sola línea:
for i in {1..10};
do echo -n "-";
done
que genera ----------
.
EDITAR :Esto fue antes de tu printf
editar.
Esto arroja un error:
$ printf '-%.0s' {1..100}; echo ""
bash: printf: -%: invalid option
printf: usage: printf [-v var] format [arguments]
Esto funciona bien bajo bash
:
$ printf -- '-%.0s' {1..100}; echo ""
----------------------------------------------------------------------------------------------------
Para otros proyectiles, intente:
printf -- '-%.0s' $(seq 100); echo ""
El problema era el printf
espera que -
inicia una opción. Como es común entre las utilidades Unix/POSIX en este tipo de situaciones, --
señales a printf
no esperar más opciones.