bash - `exit $?` 与 bash 中的 `exit` 有什么不同吗?

标签 bash shell

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

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

#!/bin/bash
foo
bar
exit 

#!/bin/bash
foo
bar
exit $?

最佳答案

没有区别。当调用 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 }

关于bash - `exit $?` 与 bash 中的 `exit` 有什么不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33325309/

相关文章:

c++ - 在windows上的ubuntu中执行.sh文件

bash - 如果一行的长度小于一个数字,则追加到它的前一行

bash - bash中是否有带赋值(三元条件)的内联if?

连续管道输入

linux - 如何解析 svn diff 结果?

linux - shell和环境变量的区别

linux - Bash 文件名前缀替换

PHP执行外部命令后返回空白页

shell - clojure——如何在不通过管道输出的情况下运行程序?

Bash:停止源脚本中的错误