さようなら行ってください!私は初心者だけで、bashスクリプトについてより深く探求したいと思います。複数の数字を試したいコマンドを実行するスクリプトを作成したいと思います。毎回001-999|事例
python3 tool.py -n 12345 -e <numbers from 001-999 in each time>
ありがとう
答え1
一方通行:
seq -w 1 999 | xargs -I {} python3 tool.py -n 12345 -e {}
これにより、各数値出力に対してPythonスクリプトが1回実行されますseq
。ここで使用されているこのseq
ユーティリティ(GNU coreutilsの一部)は1から999までの数字を出力し、各数字は同じ幅でゼロで埋められます。
シェル自体は、bash
ユーティリティ間にパイプを設定する以外に多くのことを行いません。seq
xargs
これを純粋に行うには、bash
算術for
ループを使用してprintf
数値書式を指定できます。
for (( num = 1; num <= 999; ++num )); do
printf -v znum '%.3d' "$num"
python3 tool.py -n 12345 -e "$znum"
done
この変数は、上記のループが繰り返されるたびにゼロでznum
埋められた3桁のバリアントを保持します。$num
より短いループを作成する一般的な方法は、次のように中括弧拡張をbash
使用することです。for
for num in {001..999}; do
python3 tool.py -n 12345 -e "$num"
done
次のことを覚えておけば大丈夫そうです。
以前のバージョンの
bash
シェル(macOSで使用されているデフォルトバージョンなど)は、数値ゼロパッドをサポートしていません。znum
以前に使用した方法と同様の作業を実行する必要があります。最初の反復を開始する前に、シェルは中括弧拡張を拡張し、拡張リストをメモリに保持します。この例には999個の数字があり、約4Kbのメモリを消費します。より大きなリストの場合、これは実行不可能で遅くなる可能性があります。たとえば、参照してください。Bashループは正確にどのように機能しますか?
シェルは中
bash
括弧拡張内で変数を受け入れません。