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: