Jawaban membantu John1024 memberikan solusi umum yang menunjukkan cara membedakan opsi dari operan untuk semua Utilitas seperti POSIX.
Dalam kasus yang ada, solusi paling sederhana adalah (berfungsi tidak hanya di bash
, tetapi juga di ksh
dan zsh
):
printf '%.0s-' {1..100}
Menempatkan %.0s
sebelum -
menghindari masalah -
awal disalahartikan sebagai opsi.
Sedikit dioptimalkan:
printf '%.s-' {1..100}
Saya akan merekomendasikan menggunakan for
tradisional loop, karena tidak perlu menelurkan sub-proses atau memperluas 100 argumen:
N=100
for((i = 0; i < $N; ++i)); do
printf -
done
Sangat mengherankan bahwa printf -%s
memicu "opsi tidak valid" tetapi printf -
tidak. Agar lebih aman, Anda bisa melakukan printf %s -
.
Gunakan for
lingkaran dan rentang angka:
for i in {1..10};
do echo "-";
done
Atau dalam satu baris:
for i in {1..10};
do echo -n "-";
done
yang menghasilkan ----------
.
EDIT :Ini sebelum printf
Anda sunting.
Ini menimbulkan kesalahan:
$ printf '-%.0s' {1..100}; echo ""
bash: printf: -%: invalid option
printf: usage: printf [-v var] format [arguments]
Ini bekerja dengan baik di bawah bash
:
$ printf -- '-%.0s' {1..100}; echo ""
----------------------------------------------------------------------------------------------------
Untuk shell lain, coba:
printf -- '-%.0s' $(seq 100); echo ""
Masalahnya adalah printf
mengharapkan -
itu memulai sebuah opsi. Seperti yang umum di antara utilitas Unix/POSIX dalam situasi seperti ini, --
sinyal ke printf
untuk tidak mengharapkan lebih banyak pilihan.