GNU Parallel中--max-args与--max-replace-args的区别是什么?
GNU Parallel 中
-n 与 -N 参数的实际差异 你遇到的测试效果一致的情况,是因为你使用的是2016年之后更新的较新版本GNU Parallel,官方文档的描述是基于参数最初的设计逻辑,二者的核心差异主要体现在两点:
1. 无显式替换字符串时的默认传参逻辑不同
这是两个参数当前版本仍然存在的本质区别:
- 使用
-n参数时,如果你没有在命令中写{}、{1}这类替换字符串,Parallel会自动将分好组的所有参数直接拼接到命令末尾 - 使用
-N参数时,如果你没有显式写替换字符串,Parallel不会向命令传递任何分组参数
你可以用以下测试验证差异:
# -n 无替换字符串测试 $ parallel -n3 echo ::: {A..F} A B C D E F # -N 无替换字符串测试 $ parallel -N3 echo ::: {A..F} # 输出两行空行,echo未收到任何参数
如果使用-N需要实现和-n默认一致的效果,必须显式加上全量替换符{}:
$ parallel -N3 echo {} ::: {A..F} A B C D E F
2. 位置替换字符串的支持是历史迭代产物
官方文档中提到的「-N额外提供{1}到{max-args}的位置替换字符串」是2016年之前旧版本的行为:
- 旧版本中
-n完全不支持{1}、{2}这类位置替换符,写入的话会被当作普通字面量输出,只有-N支持按位置读取分组参数 - 后续版本为了提升易用性,给
-n也新增了位置替换的能力,所以新版本中你测试的parallel -n3 echo {3} {2} {1} ::: {A..F}可以正常输出倒序参数
使用建议
- 如果只需要简单分组传参,不需要手动调整参数位置,优先用
-n,默认传参逻辑更便捷 - 如果需要按位置取用参数、或者需要兼容旧版本Parallel,优先用
-N,兼容性更好
内容的提问来源于stack exchange,提问作者ryenus
相关产品推荐
相关产品推荐

