linux 中 echo ${?}是什么意思 麻烦高手解释一下

我想请教下,linux 中 echo ${?}是什么意思 麻烦高手解释一下
最新回答
旧时青春

2024-12-02 09:32:19

显示上一个执行的命令(或程序)的返回值,这个值通常在0~255之间,0表示一切正常。
追问
0以外的数值代表什么呢
追答
一般来说,非0值就表示错误,但要根据这个值判断具体是什么错误就比较困难了。

比较标准的方法是用系统提供的sysexits.h头文件内定义的一系列宏作为出错时的返回值,每个宏都代表不同的错误类型,具体可以参考 /usr/include/sysexits.h 内的注释。不过这个头文件似乎不能满足所有程序的需要,很多程序都没有遵守这个标准

有些程序在发生内部错误时,直接用出错的系统调用产生的错误编号(errno.h里的errno)作为返回值

有些程序会在手册或文档内专门说明返回值的意义,比如bash:
1: Catchall for general errors
2: Misuse of shell builtins (according to Bash documentation)
126: Command invoked cannot execute
127: "command not found"
128: Invalid argument to exit
128+n: Fatal error signal "n"
255: Exit status out of range (exit takes only integer args in the range 0 - 255)

还有一些程序不论执行过程中发生了什么都返回0,这个很坑爹,但也是普遍存在的情况。
叆叇若紫

2024-12-02 01:55:07

显示命令

通常,make会把其要执行的命令行在命令执行前输出到屏幕上。当我们用“@”字符在命令行前,那么,这个命令将不被make显示出来,最具代表性的例子是,我们用这个功能来像屏幕显示一些信息。如:

@echo 正在编译XXX模块......

当make执行时,会输出“正在编译XXX模块......”字串,但不会输出命令,如果没有“@”,那么,make将输出:

echo 正在编译XXX模块......
正在编译XXX模块......

如果make执行时,带入make参数“-n”或“--just-print”,那么其只是显示命令,但不会执行命令,这个功能很有利于我们调试我们的Makefile,看看我们书写的命令是执行起来是什么样子的或是什么顺序的。

而make参数“-s”或“--slient”则是全面禁止命令的显示。