`exit $?`与bash中的`exit`有意义不同?

时间:2015-10-25 01:46:23

标签: bash shell

我的理解是,在bash中,普通exit将完成一个脚本,其中包含最后一个命令的退出状态。但是我也看到人们使用exit $?并且在我建议它具有相同的行为时受到质疑。

这两个脚本之间有什么有意义的区别吗?

#!/bin/bash
foo
bar
exit 

#!/bin/bash
foo
bar
exit $?

1 个答案:

答案 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 }