我的理解是,在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)
没有区别.如果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)