La réponse utile de John1024 fournit une solution générique qui montre comment lever l'ambiguïté des options des opérandes pour tous Utilitaires de type POSIX.
Dans le cas présent, la solution la plus simple est (fonctionne non seulement dans bash
, mais aussi en ksh
et zsh
):
printf '%.0s-' {1..100}
Placer %.0s
avant le -
évite le problème d'un -
initial être confondu avec une option.
Légèrement optimisé :
printf '%.s-' {1..100}
Je recommanderais d'utiliser un for
traditionnel boucle, car il n'est pas nécessaire de générer des sous-processus ou de développer 100 arguments :
N=100
for((i = 0; i < $N; ++i)); do
printf -
done
Il est curieux que printf -%s
déclenche "option invalide" mais printf -
ne fait pas. Pour peut-être être plus sûr, vous pourriez faire printf %s -
.
Utilisez un for
boucle et plage de nombres :
for i in {1..10};
do echo "-";
done
Ou sur une seule ligne :
for i in {1..10};
do echo -n "-";
done
qui affiche ----------
.
MODIFIER :C'était avant votre printf
modifier.
Cela renvoie une erreur :
$ printf '-%.0s' {1..100}; echo ""
bash: printf: -%: invalid option
printf: usage: printf [-v var] format [arguments]
Cela fonctionne bien sous bash
:
$ printf -- '-%.0s' {1..100}; echo ""
----------------------------------------------------------------------------------------------------
Pour les autres shells, essayez :
printf -- '-%.0s' $(seq 100); echo ""
Le problème était le printf
attend que -
démarre une option. Comme il est courant parmi les utilitaires Unix/POSIX dans ce type de situation, --
signaux à printf
ne s'attendre à plus d'options.