如果是,在哪个操作系统,shell或其他什么?
考虑下面的java程序(我只是以java为例,任何语言对这个问题都有好处,更多的是关于操作系统):
public class ExitCode {
public static void main(String args[]) {
System.exit(Integer.parseInt(args[0]));
}
}
Run Code Online (Sandbox Code Playgroud)
在Linux和bash上运行它,它总是返回不等于255的值,例如(echo $?打印上一个执行命令的退出代码)
> java ExitCode 2; echo $?
2
> java ExitCode 128; echo $?
128
> java ExitCode 255; echo $?
255
> java ExitCode 256; echo $?
0
> java ExitCode 65536; echo $?
0
Run Code Online (Sandbox Code Playgroud)
编辑:下面的(只有,到目前为止)答案完全解释了在UNIX上发生的事情.我仍然想知道其他操作系统.
我看到代码写在网上的某个地方,我想知道究竟什么是"$?" 做/给我们.谷歌搜索没有帮助.
这是我看到的代码:
#!/bin/sh
ping -c 2 localhost
if [ $? != 0 ] ; then
echo "Couldn't ping localhost, weird"
fi
ping -c 2 veryweirdhostname.noend
if [ $? != 0 ] ; then
echo "Surprise, Couldn't ping a very weird hostname.."
fi
echo "The pid of this process is $$"
Run Code Online (Sandbox Code Playgroud)
取自:http://efod.se/writings/linuxbook/html/shell-scripts.html
请注意,我正在运行一台Linux机器,虽然我不认为Windows(或其他)机器上的结果有所不同.
这是一个简单的问题 - C++程序通常返回32位int.如果我return -1,然后从终端打印结果,结果是255.
为什么是这样?我觉得链接这是我应该知道的,或者应该在很多年前注意到的事情 - 我以前从未真正使用过返回代码或以前想过它.
测试C++程序:
int main()
{
return -1;
}
Run Code Online (Sandbox Code Playgroud)
编译:
g++ main.cpp -o a.out
Run Code Online (Sandbox Code Playgroud)
跑:
./a.out
Run Code Online (Sandbox Code Playgroud)
检查结果:
echo $?
Run Code Online (Sandbox Code Playgroud)
结果:
255
Run Code Online (Sandbox Code Playgroud)
我本以期待看到2 ^ 32 - 1.
为什么结果255不是-1甚至是4294967295.(2^32 - 1)