Return и exit, в чем разница?
В чем разница между return и return false/true
Привет всем. Вот подскажите плиз) return; return false; return true; расскажите пожалуйста.
В чем разница между quit(),exit() и terminate() ?
Читал описание класса QThread и не могу понять в чем собствнно различие функций quit(),exit() и.
Операторы Exit, Close, Application.Terminate в чем разница между ними?
Хочу понять разницу между этими операторами. Например, оператор Application.Terminate выходит из.
замена exit(0) на return
необходимо заменить exit(0) из данного куска кода на return в main, используя при этом.
Решение
exit — это функция, которая завершает программу, откуда бы ни была вызвана. return — это оператор, который завершает работу текущей функции (т.е. передаёт управление в точку вызова текущей функции)
Если речь идёт о функции main, то return и exit по смыслу можно считать, что одно и то же. В случае выхода из main’а оператором return управление будет передано в системную часть в точку вызова main, а оттуда будет вызвана функция exit
Однако когда речь идёт о Си++, то разница есть. По оператору return будут вызваны деструкторы всех локальных живых объектов. А по exit — ничего вызвано не будет. Т.е. в C++ return и exit в main’е в общем-то отличаются поведением (в отличие от C)
Источник
Разница между return и exit в функциях Bash
в чем разница между return и exit оператор в функциях BASH относительно кодов выхода?
9 ответов
С man bash on return [n] ;
останавливает выполнение функции и возвращает вызывающему объекту значение, указанное n. Если значение n опущено, возвращается состояние последней команды, выполненной в теле функции.
вызовите выход оболочки со статусом n. Если N опущено, статус выхода-это статус последней выполненной команды. Ловушка на выходе выполняется раньше оболочка заканчивается.
EDIT:
согласно вашему редактированию вопроса, относительно кодов выхода, return не имеет ничего общего с коды выхода. Коды выхода предназначены для приложения/скрипты, а не функции. Поэтому в этом отношении единственное ключевое слово, которое задает код выхода скрипта (тот, который может быть пойман вызывающей программой с помощью $? переменной оболочки) составляет exit .
изменить 2:
мое последнее заявление по поводу exit вызывает некоторые замечания. Это было сделано, чтобы дифференцировать return и exit для понимания OP, и на самом деле, в любой заданная точка скрипта программы / оболочки, exit является единственным способом завершения сценария с кодом выхода из вызывающего процесса.
каждая команда, выполняемая в оболочке, создает локальный «код выхода»: он устанавливает $? переменная к этому коду, и может быть использована с if , && и другие операторы для условного выполнения других команд.
эти коды выхода (и стоимостью $? variable) сбрасываются при каждом выполнении команды.
кстати, код выхода последней команды, выполняемой скриптом, используется в качестве кода выхода самого скрипта, как видно вызывающему процессу.
наконец, функции при вызове действуют как команды оболочки в отношении кодов выхода. Код выхода функции (внутри функция) устанавливается с помощью return . Итак, когда в функции return 0 выполняется, выполнение функции завершается, давая код выхода 0.
return приведет к выходу текущей функции из области видимости, в то время как exit приведет к завершению сценария в точке, где он вызывается. Вот пример программы, которая поможет объяснить это:
выход
Я не думаю, что кто действительно полностью ответил на вопрос, потому что они не описывают, как они используются. Хорошо, я думаю, мы знаем, что exit убивает скрипт, где бы он ни вызывался, и вы можете назначить ему статус, такой как exit или exit 0 или exit 7 и так далее. Это можно использовать для определения того, как сценарий был вынужден остановиться, если вызывается другим сценарием и т. д. Достаточно на выходе.
return при вызове вернет значение, указанное для указания функции поведение, обычно 1 или 0. Например:
в этом примере тест может использоваться для указания, был ли найден каталог. обратите внимание, что ничего после возврата не будет выполняться в функции. 0 истинно, но false равно 1 в оболочке, отличающейся от других прогов.
Примечание: функция isdirectory предназначена только для учебных целей. Это не должно быть так, как вы выполняете такую опцию в реальном скрипте.
помните, что функции являются внутренними для скрипта и обычно возвращаются оттуда, откуда они были вызваны с помощью оператора return. Вызов внешнего скрипта-это совсем другое дело, и скрипты обычно завершаются инструкцией exit.
разница «между оператором return и exit в функциях BASH относительно кодов выхода» очень мала. Оба возвращают статус, а не значения per se. Состояние ноль указывает на успех, в то время как любой другой статус (От 1 до 255) указывает на сбой. Оператор return вернется в сценарий, откуда он был вызван, в то время как оператор exit завершит весь сценарий, с которого он встречается.
Если ваша функция просто заканчивается без оператора return, статус последней выполненной команды возвращается как код состояния (и будет помещен в $? ).
помните, возврат и выход возвращают код состояния от 0 до 255, доступный в $? . Нельзя вставьте что-нибудь еще в код состояния (например, Верните «cat»); это не сработает. Но сценарий может передать 255 различных причин сбоя с помощью кодов состояния.
вы можете установить переменные, содержащиеся в вызывающем скрипте, или результаты Эха в функции и использовать подстановку команд в вызывающем скрипте; но цель возврата и выхода-передать коды состояния, а не значения или результаты вычислений, как можно было бы ожидать на языке программирования, таком как C.
иногда, вы запускаете скрипт через . или source .
если вы включили exit на a.sh , он не просто завершит скрипт,но и завершит сеанс оболочки.
если вы включите return на a.sh , Он просто перестает обрабатывать скрипт.
простыми словами (в основном для новичков в кодировании), мы можем сказать,
также, если вы заметили, это очень основное, но.
exit завершить текущий процесс; С кодом выхода или без него, считайте это системой больше, чем функцией программы. Обратите внимание, что при поиске, exit завершит оболочку, однако, при запуске будет просто exit сценарий.
return функции вернитесь к инструкции после вызова, с кодом возврата или без него. return является необязательным и неявным в конце функции. return только может быть используется внутри функции.
я хочу добавить, что в то время как источник, это не просто exit скрипт изнутри функции, не убивая оболочку. Я думаю, пример лучше на тестовом скрипт
test -и — оболочка закроет.
только test завершится, и появится подсказка.
решение заключить потенциально процедура в ( и )
теперь, только в обоих случаях test выйдет.
прежде всего, return является ключевым словом и exit мой друг-функции.
тем не менее, вот самое простое объяснение.
return Он возвращает значение из функции.
exit Он выходит из текущей оболочки или покидает ее.
вопрос OP: В чем разница между оператором return и exit в функциях BASH относительно кодов выхода?
Firtly, некоторым требуется уточнение:
- оператор (return|exit) не требуется для завершения выполнения (функции|оболочки). A (функция|оболочка) завершится, когда он достигнет конца своего списка кода, даже без оператора (return|exit).
- оператор (return|exit) не требуется для передачи значения назад от завершенного (функция / оболочка). Каждый процесс имеет встроенную переменную $? который всегда имеет числовое значение. Это специальная переменная, которая не может быть установлена как «?=1», но устанавливается только специальными способами (см. ниже *). Стоимость $? после последней команды, выполняемой в (называемой function | sub shell), возвращается значение (function caller | parent shell). Это верно, является ли последняя выполненная команда («return [n]»| «exit [n]») или простой («return» или что-то еще else, который является последней командой в вызываемом коде функций.
в приведенном выше списке пуль выберите » (x / y)» либо всегда первый элемент, либо всегда второй элемент, чтобы получить инструкции о функциях & return или shells & exit соответственно.
что ясно, что они оба разделяют общее использование специальной переменной $? передавать значения вверх после их завершения.
* теперь для специальных способов, что $? может быть set:
- когда вызываемая функция завершается и возвращается к вызывающему объекту, тогда$? в caller будет равно конечному значению $? в завершенной функции.
- когда родительская оболочка impliciltly или явно ожидает на одной суб-оболочке и освобождается путем завершения этой суб-оболочки, то $? в родительской оболочке будет равно конечному значению $? в завершенной оболочке sub.
- некоторые встроенные функции могут изменять $? в зависимости от их результат. Но некоторые нет.
- встроенные функции «return» и «exit», когда за ними следует числовой аргумент both $? с аргументом и прекратить выполнение.
стоит отметить, что $? можно назначить значение, вызвав exit в sub shell, например:
Источник
Search
Returning Values from Bash Functions
Bash functions, unlike functions in most programming languages do not allow you to return a value to the caller. When a bash function ends its return value is its status: zero for success, non-zero for failure. To return values, you can set a global variable with the result, or use command substitution, or you can pass in the name of a variable to use as the result variable. The examples below describe these different mechanisms.
Although bash has a return statement, the only thing you can specify with it is the function’s status, which is a numeric value like the value specified in an exit statement. The status value is stored in the $? variable. If a function does not contain a return statement, its status is set based on the status of the last statement executed in the function. To actually return arbitrary values to the caller you must use other mechanisms.
The simplest way to return a value from a bash function is to just set a global variable to the result. Since all variables in bash are global by default this is easy:
The code above sets the global variable myresult to the function result. Reasonably simple, but as we all know, using global variables, particularly in large programs, can lead to difficult to find bugs.
A better approach is to use local variables in your functions. The problem then becomes how do you get the result to the caller. One mechanism is to use command substitution:
Here the result is output to the stdout and the caller uses command substitution to capture the value in a variable. The variable can then be used as needed.
The other way to return a value is to write your function so that it accepts a variable name as part of its command line and then set that variable to the result of the function:
Since we have the name of the variable to set stored in a variable, we can’t set the variable directly, we have to use eval to actually do the setting. The eval statement basically tells bash to interpret the line twice, the first interpretation above results in the string result=’some value’ which is then interpreted once more and ends up setting the caller’s variable.
When you store the name of the variable passed on the command line, make sure you store it in a local variable with a name that won’t be (unlikely to be) used by the caller (which is why I used __resultvar rather than just resultvar ). If you don’t, and the caller happens to choose the same name for their result variable as you use for storing the name, the result variable will not get set. For example, the following does not work:
The reason it doesn’t work is because when eval does the second interpretation and evaluates result=’some value’ , result is now a local variable in the function, and so it gets set rather than setting the caller’s result variable.
For more flexibility, you may want to write your functions so that they combine both result variables and command substitution:
Here, if no variable name is passed to the function, the value is output to the standard output.
Mitch Frazier is an embedded systems programmer at Emerson Electric Co. Mitch has been a contributor to and a friend of Linux Journal since the early 2000s.
Источник
Глава 22. Функции
Подобно «настоящим» языкам программирования, Bash тоже имеет функции, хотя и в несколько ограниченном варианте. Функция — это подпрограмма, блок кода который реализует набор операций, своего рода «черный ящик» , предназначенный для выполнения конкретной задачи. Функции могут использоваться везде, где имеются участки повторяющегося кода.
Вторая форма записи ближе к сердцу C-программистам (она же более переносимая).
Как и в языке C, скобка, открывающая тело функции, может помещаться на следующей строке.
Вызов функции осуществляется простым указанием ее имени в тексте сценария.
Пример 22-1. Простая функция
Функция должна быть объявлена раньше, чем ее можно будет использовать. К сожалению, в Bash нет возможности «опережающего объявления» функции, как например в C.
Допускается даже создание вложенных функций, хотя пользы от этого немного.
Объявление функции может размещаться в самых неожиданных местах.
22.1. Сложные функции и сложности с функциями
Функции могут принимать входные аргументы и возвращать код завершения.
Доступ к входным аргументам, в функциях, производится посредством позиционных параметров, т.е. $1, $2 и так далее.
Пример 22-2. Функция с аргументами