primeiro sua função printf funciona perfeitamente
$ export c=" "
$ LC_CTYPE=C printf "%d\n" "'$c"
32
Mas executar a linha de script com -vx mostra que os dados que chegam a essa linha estão errados (não vou colar essa saída)
Então eu acho que é a leitura que está errada. O delimitador EOL padrão para leitura é newline, então tentei alterar isso. Isso parece funcionar
while IFS= read -d$ export c=" "
$ LC_CTYPE=C printf "%d\n" "'$c"
32
-r -n1 c; do ch=$(LC_CTYPE=C printf "%d\n" "'$c") ; echo "ch=$ch"; done < input_file_name