我有一个val.py
返回负数的 python 脚本。
import sys
sys.exit(-1234)
当我运行这个 bash 脚本时,我得到的$?
返回值是 46(不是 -1234)。即使当我尝试将值与$? == 46
or进行比较时$? == "46"
,它也根本不起作用。
python val.py
echo $?
if [ $? == 46 ]; then
echo "Match"
else
echo "NO"
fi
- Q1:为什么返回值没有正确存储
$?
? - Q2:为什么是$? == 数字比较不起作用?
答案1
exit()
进程传递给的状态被屏蔽为单个字节,因此它限制在范围内[0-255]
。请参阅exit
文档:
status 的值可以是 0、EXIT_SUCCESS、EXIT_FAILURE 或任何其他值只有最低有效 8 位(即状态 & 0377)可供等待的父进程使用。
在二进制补码实现中,-1234d == 0x...ffffb2e
、 和0x2e == 46d
,因此您看到的结果是预期的。
对于第二个问题,您的if
声明正在测试 的退出状态echo $?
,而不是 python 程序的退出状态。
尝试:
python val.py
rc=$?
echo $rc
if [ $rc == 46 ] ; then
...