С man bash
по return [n]
;
Заставляет функцию прекратить выполнение и вернуть значение, указанное в n, вызывающей стороне. Если n опущено, возвращается статус последней команды, выполненной в теле функции.
... в exit [n]
:
Заставить оболочку завершиться со статусом n. Если n опущено, статус выхода соответствует статусу последней выполненной команды. Ловушка на EXIT выполняется перед завершением оболочки.
EDIT:
Согласно вашему редактированию вопроса относительно кодов выхода, return
не имеет ничего общего с кодами выхода. Коды выхода предназначены для приложений / сценариев , а не функций. Таким образом, в этом отношении единственное ключевое слово, которое устанавливает код завершения скрипта (то, которое может быть перехвачено вызывающей программой с помощью переменной оболочки $?
), это exit
.
РЕДАКТИРОВАТЬ 2:
Мое последнее утверждение со ссылкой exit
вызывает некоторые комментарии. Он был сделан для того, чтобы различать return
и exit
для понимания ОП, и на самом деле, на любой заданной точке скрипта программы / оболочки, exit
- единственный способ завершить скрипт с кодом выхода в вызывающий процесс.
Каждая команда, выполняемая в оболочке, создает локальный «код выхода»: для этого кода устанавливается переменная $?
, и ее можно использовать с if
, &&
и другими операторами для условного выполнения других команд.
Эти коды выхода (и значение переменной $?
) сбрасываются при каждом выполнении команды.
Между прочим, код завершения последней команды, выполняемой сценарием, используется в качестве кода завершения самого сценария, видимого вызывающим процессом.
Наконец, функции при вызове действуют как команды оболочки относительно кодов выхода. Код выхода функции ( в пределах функции) устанавливается с помощью return
. Таким образом, когда в функции return 0
выполняется, выполнение функции прекращается, давая код выхода 0.