向 GNU 并行转发空参数不起作用?

Foward empty arguments to GNU parallel does not work?

我有以下

function doit() { echo "'', '', ''"; }
export -f doit
args=("a" "") # Empty argument
echo -e "1\n2" | parallel -k "doit" "${args[@]}" {}

不转发空参数:

'a', '1', ''
'a', '2', ''

应该是

'a', '', '1'
'a', '', '2'

parallel 为什么会这样,如何解决?

parallel 将字符串传递给 bash -c - 它们根据 shell 规则进行解释,空参数只是连接起来并进行分词扩展。

如果您想保留参数,请引用它们。 "$(printf "%q " "${args[@]}")" 手动或只是 parallel -qparallel --quote.