variable interpolation in shell script

A very common mistake:

ERROR_FILE="$HOME/pg_bak/error_bak/${FILE}_error.txt"

As jlliagre pointed out you need to use braces around the part of the string you want bash to treat as a variable name. Otherwise it will only stop treating the string as the name when it gets to a character that can't be part of the name.

In this case FILE_error is being treated as the name of the variable because _ is allowed in variable names. You actually only want the FILE part, so you have to tell bash that specifically by putting braces around that part as ${FILE}_error.

In your example FILE_error was never set, so it expands to an empty string, so you get just .txt as the filename.