Специальная переменная $?
расширяется до состояния выхода последнего выполненного переднего конвейера . В вашем примере | echo $?
самый последний выполняемый конвейер переднего плана, в этот момент состояние выхода команды перед последней |
больше не доступно через $?
.
В связанной заметке вы можете использовать код выхода непосредственно в условных выражениях, например:
if ls | grep -q foo; then echo success, there is foo; fi
Или, если вы хотите выполнить что-то в случае успеха, вы можете связать следующую команду, используя &&
:
ls | grep -q foo && echo success