O erro está na seguinte linha:
[ -f "$in" ] && return 0 || { echo "File \""$in"\" does not exist."; return 1; }
Você return
da função se o parâmetro in
da função for um arquivo. Isso explicaria a ausência do arquivo de saída.
Talvez você quisesse dizer:
[ -f "$in" ] || { echo "File \""$in"\" does not exist."; return 1; }
ou
[ ! -f "$in" ] && { echo "File \""$in"\" does not exist."; return 1; }
Além disso, você não verá o arquivo temporário ao movê-lo para a saída:
mv tmp "$out"