Isso depende do que você quer fazer com a string que você cria. Parece um conjunto de opções de linha de comando, então vou supor que você queira usá-lo como tal junto com algum utilitário chamado util .
Aqui está uma solução para /bin/sh :
#!/bin/sh
listfile=$1
set --
while IFS= read -r line; do
set -- "$@" -o "$line:1"
done <$listfile
util "$@"
Isso lê o arquivo fornecido na linha de comando do script e, para cada linha lida nesse arquivo, ele define os parâmetros posicionais para incluir -o e LINE:1 , em que LINE é a linha lida do arquivo. .
Depois de ler todas as linhas, ele chama util com a lista construída de argumentos da linha de comando. Usando "$@" (com as aspas duplas), asseguramos que cada item individual na lista de argumentos construídos seja citado individualmente.
Com bash e usando uma matriz bash para manter os argumentos de linha de comando que criamos:
#!/bin/bash
listfile=$1
while IFS= read -r line; do
args+=( -o "$line:1" )
done <$listfile
util "${args[@]}"
Em ambos os exemplos acima, a cotação é importante. Da mesma forma é o fato de criarmos uma matriz de itens separados (cada -o e cada LINE:1 são itens da lista). Outra maneira de fazer isso seria criar uma string única -o LINE1:1 -o LINE2:1 etc. , mas isso teria sido interpretado como um único argumento se usado como util "$string" e teria sofrido divisão de palavras e globalização de nome de arquivo se usado como util $string (isso não teria funcionado se alguma linha no arquivo de entrada contivesse espaços, tabulações ou caracteres de globalização de nome de arquivo).
Ambos os scripts acima seriam usados como
$ ./script.sh file
onde script.sh é o arquivo de script executável e file é o nome do arquivo de entrada para ler.
Relacionados: