Die hilfreiche Antwort von John1024 bietet eine generische Lösung, die zeigt, wie Optionen von Operanden für all disambiguiert werden POSIX-ähnliche Dienstprogramme.
Im vorliegenden Fall ist die einfachste Lösung (funktioniert nicht nur in bash
, sondern auch in ksh
und zsh
):
printf '%.0s-' {1..100}
Platzierung von %.0s
vorher die -
vermeidet die Ausgabe eines anfänglichen -
mit einer Option verwechselt werden.
Leicht optimiert:
printf '%.s-' {1..100}
Ich würde empfehlen, einen traditionellen for
zu verwenden -Schleife, da keine Unterprozesse erzeugt oder 100 Argumente erweitert werden müssen:
N=100
for((i = 0; i < $N; ++i)); do
printf -
done
Es ist merkwürdig, dass printf -%s
löst "ungültige Option" aus, aber printf -
nicht. Um vielleicht besonders sicher zu sein, könnten Sie printf %s -
tun .
Verwenden Sie einen for
Schleife und Nummernkreis:
for i in {1..10};
do echo "-";
done
Oder in einer einzelnen Zeile:
for i in {1..10};
do echo -n "-";
done
was ----------
ausgibt .
BEARBEITEN :Das war vor Ihrem printf
bearbeiten.
Dies wirft einen Fehler:
$ printf '-%.0s' {1..100}; echo ""
bash: printf: -%: invalid option
printf: usage: printf [-v var] format [arguments]
Dies funktioniert gut unter bash
:
$ printf -- '-%.0s' {1..100}; echo ""
----------------------------------------------------------------------------------------------------
Versuchen Sie für andere Shells:
printf -- '-%.0s' $(seq 100); echo ""
Das Problem war printf
erwartet das -
startet eine Option. Wie bei Unix/POSIX-Dienstprogrammen in dieser Art von Situation üblich, --
Signale an printf
keine Optionen mehr zu erwarten.