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

Ben*_*ick 4 bash shell

我的理解是,在bash中,plain exit将使用最后一个命令的退出状态完成一个脚本.但我也看到人们使用exit $?并在我提出它具有相同行为时受到质疑.

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

#!/bin/bash
foo
bar
exit 
Run Code Online (Sandbox Code Playgroud)

#!/bin/bash
foo
bar
exit $?
Run Code Online (Sandbox Code Playgroud)

woo*_*oot 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 }
Run Code Online (Sandbox Code Playgroud)