我正在尝试使用 GNU parallel 来针对几个行为改变标志的所有组合运行命令:
parallel 'cmd --foo {1} --bar {2} {3} out.foo={1}.bar={2}/{3/}' ::: 0 1 ::: 0 1 ::: in/*
这应该会产生一系列类似这样的调用:
cmd --foo 0 --bar 1 'in/fileXYZ' 'out.foo=0.bar=1/fileXYZ'
cmd --foo 1 --bar 0 'in/fileXYZ' 'out.foo=1.bar=0/fileXYZ'
但是,此工具的 CLI 不规则:--foo
接受布尔参数,--bar
而不接受参数(并且也没有否定形式)。因此,调用必须如下所示:
cmd --foo 0 --bar 'in/fileXYZ' 'out.foo=0.bar=1/fileXYZ'
cmd --foo 1 'in/fileXYZ' 'out.foo=1.bar=0/fileXYZ'
1
在 GNU parallel 中将或 的参数转换为命令行上的 的0
存在或不存在的最佳(最不冗长)方法是什么?--bar
我认为您遗漏的部分是
uq()
。通常会将空字符串插入为“”,但由于uq()
字符串未加引号,因此不会插入任何内容:或者:
这样,我们只在
uq()
需要时才调用“”。因此--bar
将被引用,因此可以包含空格。