What does “$?” give us exactly in a shell script? [duplicate]

只愿长相守 提交于 2019-11-30 07:59:48

$? is a variable holding the return value of the last command you ran.

Example C program (example.c):

int main() { return 1; }

Example Bash:

gcc -o example example.c
./example
echo $? # prints 1
Jens

Most of the answers are missing a bit of detail. A definitive answer is found in the POSIX standard for the shell, in the section on special parameters:

$? Expands to the decimal exit status of the most recent pipeline (see Pipelines ).

Don't be surprised by the word pipeline, because even a simple command such as ls is grammatically a pipeline consisting of a single command. But then, what is $? for a multi-command pipeline? It's the exit status of the last command in the pipeline.

And what about pipelines executing in the background, like grep foo bigfile|head -n 10 > result &?

Their exit status can be retrieved through wait once the pipeline's last command has finished. The background process pid is available as $!, and $? only reports whether the background command was correctly started.

Another detail worth mentioning is that the exit status is usually in the range 0 through 255, with 128 to 255 indicating the process exited due to a signal. Returning other values from a C program is likely to not be reflected accurately in $?.

It's the return code from the most recently executed command.

By convention 0 is a successful exit and non-zero indicates some kind of error.

This special variable shows the exit status of the last command that was run in a script or command-line. For example, in a command-line, the user could type

 who; echo $?

The output would then be

 user  tty7         2014-07-13 19:47
 0

This shows the output of who and the exit status of the command. A script would be the same.

 #!/bin/bash
 who
 echo $?

Output: 0

craq

the other answers cover bash pretty well, but you don't specify a shell in your question. In csh (and tcsh) $? can be used to query the existence of variables, e.g.

if $?my_var then
    echo my_var exists
endif
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!