Como apontado nos comentários, sua citação está errada. Você precisa de aspas simples para impedir que $LINENO
seja expandido quando a linha de trapping for analisada pela primeira vez.
Isso funciona:
#! /bin/bash
err_report() {
echo "Error on line $1"
}
trap 'err_report $LINENO' ERR
echo hello | grep foo # This is line number 9
Executando:
$ ./test.sh
Error on line 9