<(cmd) e >(cmd) são a gramática da shell (chamada de substituição de processo). Eles são substituídos por um caminho de arquivo, por exemplo,
cmd1 <(cmd2)
torna-se
cmd1 /path/to/file
O conteúdo do arquivo é a saída de cmd2 , portanto, ele pode ser lido apenas, mas não gravado. Um exemplo:
start cmd:> ls -l <(echo foo)
lr-x------ 1 hl hauke 64 5. Jan 03:49 /dev/fd/63 -> pipe:[3125128]
Nesse caso, ls vê /dev/fd/63 como argumento. No seu caso, esse caminho se torna parte de um redirecionamento. Assim, o espaço em branco é obrigatório. > >(cmd) é "stdout de redirecionamento para um arquivo temporário cujo conteúdo se torna a entrada de cmd", enquanto >>(cmd) causa um erro porque o shell espera um caminho (ou espaço em branco) após >> . >>'(cmd)' "funciona" porque agora (cmd) é considerado um arquivo:
start cmd:> echo foo >>'(cat)'
start cmd:> cat \(cat\)
foo