我有以下
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 -q
或parallel --quote
。