No caso específico de printf
, você sempre pode fazer:
echo {1..8} | xargs printf 'the number %s comes before %s\n'
porque printf
tem uma habilidade semelhante a xargs
intrínseca para executar várias vezes
se ele receber mais argumentos do que o necessário para uma única chamada.
Embora isso tenha pouca vantagem sobre
printf 'the number %s comes before %s\n' {1..8}
E para listas grandes, o comando simples xargs
pode resultar
em xargs
executando várias instâncias de printf
,
alguns dos quais podem ter números ímpares de argumentos.
Você poderia passar -n 1000
para xargs
para se proteger contra isso, onde 1000 é um número par que deve ser pequeno o suficiente para não atingir a lista arg demais limite e grande o suficiente para evitar a execução muitos printf
s.
Observe que xargs
chamaria, não o printf
do seu shell,
mas o% externo% co_de, com cada invocação em um novo processo separado.
Observe também que, para uma entrada vazia, exceto em alguns BSDs, ela ainda executaria printf
uma vez sem argumento. GNU printf
e compatível têm xargs
(ou -r
) para evitar isso.
Para ser claro, essa resposta simples é específica para o seu --no-run-if-empty
exemplo.
e não funcionaria no caso geral
onde você deve passar dois parâmetros de cada vez para o seu comando
(como seria o caso de printf
, por exemplo).
Para resolver o problema geral com diff
, você pode usar:
for i j ({1..8}) echo the number $i comes before $j