Aqui está uma possibilidade:
$ cat tmp
1st line
2nd line
3rd line
4th line
$ command $(sed 's|.*|-o "&"|' tmp | tr '\n' ' ')
Como Glennjackman aponta nos comentários, a divisão de palavras pode ser evitada ao se envolver em eval, embora as implicações de segurança isso deve ser apreciado:
$ eval "command $(sed 's|.*|-o "&"|' tmp | tr '\n' ' ')"
Editar: Combinar minha sugestão de usar sed
para montar argumentos com a abordagem mapfile
/ readarray
de glenn jackman fornece a seguinte forma concisa:
$ mapfile -t args < <(sed 's|.*|-o\n&|' tmp) && command "${args[@]}"
Como uma demonstração trivial, considere o arquivo tmp
acima mencionado, o comando grep
e o arquivo text
:
$ cat text
some text 1st line and
a 2nd nonmatching line
some more text 3rd line end
$ mapfile -t args < <(sed 's|.*|-e\n&|' tmp) && grep "${args[@]}" text
some text 1st line and
some more text 3rd line end
$ printf "%s\n" "${args[@]}"
-e
1st line
-e
2nd line
-e
3rd line
-e
4th line