A substituição de comando sem aspas 'cat $PWD/$1 | jq -cr '.[]''
faz o seguinte:
- Execute o comando
cat $PWD/$1 | jq -cr '.[]'
. Que por sinal é uma maneira excessivamente complicada de escreverjq -cr '.[]' <"$1"
, exceto que essa variante não quebra se$1
contiver certos caracteres especiais ou for um caminho absoluto. - Divida a sequência resultante em partes separadas por espaços em branco. Sua pergunta não é muito clara, mas você parece esperar peças separadas por novas linhas - não é isso que uma substituição sem aspas faz.
- Trate cada parte como um padrão curinga e, se ela corresponder a um ou mais nomes de arquivo, substitua essa parte pela lista de nomes de arquivos correspondentes.
Os passos 2 e 3 são coloquialmente conhecidos como o "operador split + glob" e quase nunca é o que você quer . Sempre use aspas duplas em torno da variável e substituições de comando, a menos que você saiba exatamente por que precisa deixar as aspas .
Para processar um arquivo linha a linha no shell, use um while read :
jq -cr '.[]' <"$1" |
while IFS= read -r line; do
printf '%s\n' "$line"
done
Mas você pode ser melhor em outras ferramentas. Os shells não são bons para processar grandes quantidades de dados de strings sozinhos.