A exportação da função deve fazê-lo (não testado):
export -f echo_var
seq -f "n%04g" 1 100 | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
Você pode usar o builtin em printfvez do externo seq:
printf "n%04g\n" {1..100} | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
Além disso, usar return 0e exit 0assim mascara qualquer valor de erro que possa ser produzido pelo comando que o precede. Além disso, se não houver erro, é o padrão e, portanto, um pouco redundante.
@phobic menciona que o comando Bash poderia ser simplificado para
bash -c 'echo_var "{}"'
movendo o {}diretamente dentro dele. Mas é vulnerável à injeção de comandos, como apontado por @Sasha.
Aqui está um exemplo de por que você não deve usar o formato incorporado:
$ echo '$(date)' | xargs -I {} bash -c 'echo_var "{}"'
Sun Aug 18 11:56:45 CDT 2019
Outro exemplo de por que não :
echo '\"; date\"' | xargs -I {} bash -c 'echo_var "{}"'
É isso que é produzido usando o formato seguro :
$ echo '$(date)' | xargs -I {} bash -c 'echo_var "$@"' _ {}
$(date)
Isso é comparável ao uso de consultas SQL parametrizadas para evitar injeção .
Estou usando dateuma substituição de comando ou entre aspas aqui, em vez do rmcomando usado no comentário de Sasha, pois não é destrutivo.