带数字的 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 脚本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保存由零填充的三位数变体。$num

制作较短循环的常见方法bash是使用for大括号扩展,如

for num in {001..999}; do
    python3 tool.py -n 12345 -e "$num"
done

我认为如果你记住以下几点就完全可以了:

  1. 旧版本的bashshell(例如 macOS 上使用的默认版本的 shell)不会对数字进行零填充。您必须执行类似于我znum之前使用的方式的操作。

  2. 在开始第一次迭代之前,shell 将展开大括号展开并将展开的列表保留在内存中。对于这个例子,有 999 个数字,这将消耗大约 4 Kb 的内存。对于较大的列表,这可能不可行且缓慢。参见例如bash 循环如何精确工作?

  3. shellbash不允许在大括号扩展中使用变量。

相关内容