L'utile risposta di John1024 fornisce una soluzione generica che mostra come disambiguare le opzioni dagli operandi per all Utilità simili a POSIX.
Nel caso in questione, la soluzione più semplice è (funziona non solo in bash
, ma anche in ksh
e zsh
):
printf '%.0s-' {1..100}
Piazzando %.0s
prima il -
evita l'emissione di un -
iniziale essere scambiato per un'opzione.
Leggermente ottimizzato:
printf '%.s-' {1..100}
Consiglierei di usare un for
tradizionale loop, poiché non è necessario generare sottoprocessi o espandere 100 argomenti:
N=100
for((i = 0; i < $N; ++i)); do
printf -
done
È curioso che printf -%s
attiva "opzione non valida" ma printf -
non. Forse per essere più sicuro, potresti fare printf %s -
.
Usa un for
ciclo e intervallo di numeri:
for i in {1..10};
do echo "-";
done
O su una sola riga:
for i in {1..10};
do echo -n "-";
done
che restituisce ----------
.
MODIFICA :Questo era prima del tuo printf
modifica.
Questo genera un errore:
$ printf '-%.0s' {1..100}; echo ""
bash: printf: -%: invalid option
printf: usage: printf [-v var] format [arguments]
Funziona bene sotto bash
:
$ printf -- '-%.0s' {1..100}; echo ""
----------------------------------------------------------------------------------------------------
Per altre shell, prova:
printf -- '-%.0s' $(seq 100); echo ""
Il problema era il printf
si aspetta che -
avvia un'opzione. Come è comune tra le utility Unix/POSIX in questo tipo di situazione, --
segnali a printf
non aspettarsi più opzioni.