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



我有以下

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

它没有提出空的论点:

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

相反,它应该是

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

为什么parallel会这样做,以及如何修复它?

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

如果你想保留论点,引用它们。手动"$(printf "%q " "${args[@]}")"或仅parallel -qparallel --quote

最新更新