Užitečná odpověď John1024 poskytuje obecné řešení, které ukazuje, jak odlišit možnosti od operandů pro všechny nástroje podobné POSIXu.
V daném případě je nejjednodušší řešení (funguje nejen v bash
, ale také v ksh
a zsh
):
printf '%.0s-' {1..100}
Umístění %.0s
před -
předchází problému s počátečním -
omylem za možnost.
Mírně optimalizováno:
printf '%.s-' {1..100}
Doporučil bych použít tradiční for
smyčky, protože není potřeba vytvářet dílčí procesy nebo rozšiřovat 100 argumentů:
N=100
for((i = 0; i < $N; ++i)); do
printf -
done
Je zvláštní, že printf -%s
spouští "neplatná možnost", ale printf -
ne. Chcete-li být ještě bezpečnější, můžete udělat printf %s -
.
Použijte for
smyčka a číselný rozsah:
for i in {1..10};
do echo "-";
done
Nebo na jednom řádku:
for i in {1..10};
do echo -n "-";
done
jehož výstupem je ----------
.
UPRAVIT :Bylo to před vaším printf
upravit.
Toto vyvolá chybu:
$ printf '-%.0s' {1..100}; echo ""
bash: printf: -%: invalid option
printf: usage: printf [-v var] format [arguments]
Toto funguje dobře pod bash
:
$ printf -- '-%.0s' {1..100}; echo ""
----------------------------------------------------------------------------------------------------
Pro ostatní shelly zkuste:
printf -- '-%.0s' $(seq 100); echo ""
Problém byl printf
očekává, že -
spustí volbu. Jak je v tomto typu situace běžné mezi unixovými/POSIXovými nástroji, --
signály na printf
neočekávat žádné další možnosti.