Поскольку вы использовали двойные кавычки, $?
расширяется, когда вы присваиваете значение -, в чем вы можете убедиться, используяset -x
:
$ PROMPT_COMMAND="echo $?"
+ PROMPT_COMMAND='echo 0'
++ echo 0
0
Если вы измените двойные кавычки на одинарные, вы должны получить желаемое поведение:
$ PROMPT_COMMAND='echo $?'
+ PROMPT_COMMAND='echo $?'
++ echo 0
0
т.е.
$ set +x
+ set +x
0
$ ls nofile
ls: cannot access 'nofile': No such file or directory
2