La exportación de la función debería hacerlo (sin probar):
export -f echo_var
seq -f "n%04g" 1 100 | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
Puede usar el incorporado en printflugar del externo seq:
printf "n%04g\n" {1..100} | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
Además, el uso return 0y exit 0similares oculta cualquier valor de error que pueda generar el comando que lo precede. Además, si no hay error, es el valor predeterminado y, por lo tanto, algo redundante.
@phobic menciona que el comando Bash podría simplificarse para
bash -c 'echo_var "{}"'
moviendo el {}directamente dentro de él. Pero es vulnerable a la inyección de comandos como lo señaló @Sasha.
Aquí hay un ejemplo de por qué no debe usar el formato incrustado:
$ echo '$(date)' | xargs -I {} bash -c 'echo_var "{}"'
Sun Aug 18 11:56:45 CDT 2019
Otro ejemplo de por qué no :
echo '\"; date\"' | xargs -I {} bash -c 'echo_var "{}"'
Esto es lo que se genera con el formato seguro :
$ echo '$(date)' | xargs -I {} bash -c 'echo_var "$@"' _ {}
$(date)
Esto es comparable al uso de consultas SQL parametrizadas para evitar la inyección .
Estoy usando dateuna sustitución de comando o entre comillas escapadas aquí en lugar del rmcomando utilizado en el comentario de Sasha, ya que no es destructivo.