再会!我只是一个初学者,我想深入研究 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
之间设置管道之外,外壳本身在这里并没有做太多事情。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
保存由零填充的三位数变体。$num
制作较短循环的常见方法bash
是使用for
大括号扩展,如
for num in {001..999}; do
python3 tool.py -n 12345 -e "$num"
done
我认为如果你记住以下几点就完全可以了:
旧版本的
bash
shell(例如 macOS 上使用的默认版本的 shell)不会对数字进行零填充。您必须执行类似于我znum
之前使用的方式的操作。在开始第一次迭代之前,shell 将展开大括号展开并将展开的列表保留在内存中。对于这个例子,有 999 个数字,这将消耗大约 4 Kb 的内存。对于较大的列表,这可能不可行且缓慢。参见例如bash 循环如何精确工作?
shell
bash
不允许在大括号扩展中使用变量。