Uma maneira de fazer isso:
echo "a b c" | xargs printf -- '-f %s\n' | xargs mycommand
Isso pressupõe que a , b e c não contêm espaços em branco, novas linhas, citações ou barras invertidas. :)
Com o% GNUfindutil você pode lidar com o caso geral, mas é um pouco mais complicado:
echo -n "a|b|c" | tr \| \0 | xargs -0 printf -- '-f... | xargs -x -0 mycommand
%secho "a b c" | xargs printf -- '-f %s\n' | xargs mycommand
' | xargs -0 mycommand
Você pode substituir o separador | por outro caractere que não aparece em a , b ou c .
Editar: como @MichaelMol observa, com uma lista muito longa de argumentos há um risco de transbordar o comprimento máximo de argumentos que podem ser passados para mycommand . Quando isso acontecer, o último xargs dividirá a lista e executará outra cópia de mycommand , e há o risco de deixar um -f não finalizado. Se você se preocupar com essa situação, poderá substituir o último xargs -0 acima por algo como isto:
echo -n "a|b|c" | tr \| \0 | xargs -0 printf -- '-f... | xargs -x -0 mycommand
%s%pre%' | xargs -0 mycommand
Isso não resolverá o problema, mas interromperá a execução de mycommand quando a lista de argumentos ficar muito longa.