Você não precisa de um arquivo temporário para fazer isso, e sed (ou awk) são muito mais flexíveis no processamento de comentários do que uma declaração de caso shell.
Por exemplo:
configfile='/opt/myconfigfile.txt'
[ $# -gt 0 ] && [ -r "$1" ] && configfile="$1"
sed -e 's/[[:space:]]*#.*// ; /^[[:space:]]*$/d' "$configfile" |
while read var1 var2 var3 var4; do
# stuff with var1, etc.
done
Isso remove comentários (com ou sem espaços em branco iniciais) e exclui linhas vazias da entrada antes de inseri-la no loop while. Ele lida com comentários nas linhas por si e comentários anexados ao final da linha:
# full-line comment
# var1 var2 var3 var4
abc 123 xyz def # comment here
Chamar sed
ou awk
para tarefas como esta não é "absurdo", é perfeitamente normal. É para isso que servem essas ferramentas. Quanto ao desempenho, eu apostaria que em nada além de arquivos de entrada muito pequenos, a versão sed
seria muito mais rápida. O piping para sed
tem alguma sobrecarga de inicialização, mas é executado muito rápido, enquanto o shell é lento.