John1024 の役立つ回答は、all のオペランドからオプションを明確にする方法を示す一般的なソリューションを提供します POSIX ライクなユーティリティ。
この場合、最も簡単な解決策は (bash だけでなく、 、しかし ksh でも と zsh ):
printf '%.0s-' {1..100}
%.0s を配置する 以前 - 初期の - の問題を回避します 選択肢と間違われる。
少し最適化:
printf '%.s-' {1..100}
従来の for を使用することをお勧めします サブプロセスを生成したり、100 個の引数を展開したりする必要がないため、ループします。
N=100
for((i = 0; i < $N; ++i)); do
printf -
done
printf -%s というのは興味深いです 「無効なオプション」をトリガーしますが、printf - ではない。おそらくさらに安全にするために、 printf %s - を実行できます .
for を使用 ループと番号の範囲:
for i in {1..10};
do echo "-";
done
または 1 行で:
for i in {1..10};
do echo -n "-";
done
---------- を出力する .
編集 :これは printf の前でした 編集してください。
これはエラーをスローします:
$ printf '-%.0s' {1..100}; echo ""
bash: printf: -%: invalid option
printf: usage: printf [-v var] format [arguments]
これは bash の下で正常に動作します :
$ printf -- '-%.0s' {1..100}; echo ""
----------------------------------------------------------------------------------------------------
他のシェルについては、以下を試してください:
printf -- '-%.0s' $(seq 100); echo ""
問題は printf でした - が期待されます オプションを開始します。この種の状況では、Unix/POSIX ユーティリティではよくあることですが、 -- printf へのシグナル これ以上の選択肢はありません。