数値を含むBash印刷コマンド

数値を含むBash印刷コマンド

さようなら行ってください!私は初心者だけで、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ユーティリティ間にパイプを設定する以外に多くのことを行いません。seqxargs

これを純粋に行うには、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

次のことを覚えておけば大丈夫そうです。

  1. 以前のバージョンのbashシェル(macOSで使用されているデフォルトバージョンなど)は、数値ゼロパッドをサポートしていません。znum以前に使用した方法と同様の作業を実行する必要があります。

  2. 最初の反復を開始する前に、シェルは中括弧拡張を拡張し、拡張リストをメモリに保持します。この例には999個の数字があり、約4Kbのメモリを消費します。より大きなリストの場合、これは実行不可能で遅くなる可能性があります。たとえば、参照してください。Bashループは正確にどのように機能しますか?

  3. シェルは中bash括弧拡張内で変数を受け入れません。

おすすめ記事