Переменная $?
редко требуется. Псевдо-идиома command; if [ $? -eq 0 ]; then X; fi
всегда должна быть записана как if command; then X; fi
.
Случаи, когда требуется $?
, необходимо проверить на несколько значений:
command
case $? in
(0) X;;
(1) Y;;
(2) Z;;
esac
или когда $?
необходимо повторно использовать или иным образом манипулировать:
if command; then
echo "command successful" >&2
else
ret=$?
echo "command failed with exit code $ret" >&2
exit $ret
fi