2015-10-25 3 views
4

Я понимаю, что в bash простая exit завершит сценарий с статусом выхода последней команды. Но я также видел людей, использующих exit $?, и был допрошен, когда я предположил, что он имеет такое же поведение.

Есть ли значимая разница между этими двумя сценариями?

#!/bin/bash 
foo 
bar 
exit 

и

#!/bin/bash 
foo 
bar 
exit $? 
+0

см. ** [exit-status.html] (http://tldp.org/LDP/abs/html/exit-status.html) **. «Эквивалентом голого« выхода »является« выход $? »Или даже просто отказ от выхода». – amdixon

+0

Нет; и вы можете опустить явный «выход», и он все равно будет по существу тем же. –

ответ

8

Там нет никакой разницы. Когда exit вызывается без параметра, он вернет код выхода последней команды.

Вот код от GNU bash. Если параметр не задан, он возвращает last_command_exit_value, в противном случае он принимает аргумент переданный в аргументе, удостоверяется, что он является числом, отбивает любые биты выше 8 и возвращает это.

486 get_exitstat (list) 
    487  WORD_LIST *list; 
    488 { 
    489 int status; 
    490 intmax_t sval; 
    491 char *arg; 
    492 
    493 if (list && list->word && ISOPTION (list->word->word, '-')) 
    494  list = list->next; 
    495 
    496 if (list == 0) 
    497  return (last_command_exit_value);  
    498 
    499 arg = list->word->word; 
    500 if (arg == 0 || legal_number (arg, &sval) == 0) 
    501  { 
    502  sh_neednumarg (list->word->word ? list->word->word : "`'"); 
    503  return EX_BADUSAGE; 
    504  } 
    505 no_args (list->next); 
    506 
    507 status = sval & 255; 
    508 return status; 
    509 } 
Смежные вопросы