Wrong parsing &, | or ; characters

For example:
$ echo te&st
*** unknown command: st

$ echo te\&st
*** unknown command: st

after change
$ echo te&st
*** unknown command: st

$ echo te\&st
te&st