Seria melhor você usar substituição de processo em vez de uma variável:
while read line; do
....
done < <(grep -E 'INPUT.*ACCEPT' $FILE)
(note dois caracteres <
). Isso evita o carregamento de toda a saída grep
na memória de uma só vez para armazenar em uma variável. O processo grep
será executado em paralelo com o loop, e o loop verá a saída de grep
como entrada de read
à medida que cada linha é impressa (até o buffer).
Isso tenderá a ser mais rápido e usar menos memória do que usar a substituição do comando $(...)
e manter toda a saída ao redor. Também é geralmente melhor estilo se você estiver escrevendo um script específico do Bash, porque é explícito sobre o que você está usando o comando.
Indiscutivelmente, isso é um pouco um antipadrão para começar - talvez seja melhor ainda usar um pipeline comum para qualquer processamento que você precisar, em vez de while read ...
e processá-lo no Bash, mas há casos válidos para usar .