gpt4 book ai didi

c - echo $?行为不同

转载 作者:行者123 更新时间:2023-11-30 18:41:31 25 4
gpt4 key购买 nike

我有这个 C 程序:

int main() { return 10; }

运行此命令后,当我在终端中写入 echo $? 时,它会打印 10

现在假设我有一个 .sh 文件:

echo $?

运行 C 程序后,如果我运行 .sh 文件,它会打印 0

为什么?

最佳答案

简单:.sh 文件由 bash 或其他 shell 执行。该二进制文件(/bin/bash 或任何位置)执行脚本,然后退出。如果 shell 二进制文件成功退出,它将向系统返回0
当你的 bin 返回 10 到系统并执行 .sh 文件后,一个新的 shell 进程启动(并且这个 shell 没有执行你的程序)。因此 echo $? 可能会回显执行 shell 实例运行的另一个进程的返回值(登录或其他......)

命令 echo $? 回显您执行的最后一个程序的退出代码返回的值。对于您的 C 程序,它返回 10,因此您会看到 10 显示。尽管您的 .sh 文件是由另一个二进制文件执行的,但它会返回 0(成功时),因此 echo $? 显示 0。

假设你这样做:

./your_bin
./your.sh
echo $?
//--> echoes 0
./your_bin
echo $?
//--> echoes

如果您在 bash 脚本中执行二进制文件,并且您的脚本要“转发”该二进制文件的退出代码,则只需编写:

#!/bin/bash
./your_bin
exit $?

旁注:从程序返回随机整数并不是最好的想法。退出代码意味着某些东西。这就是 C 标准库定义 2 个宏的原因:

printf("%d vs %d\n",
EXIT_SUCCESS
EXIT_FAILURE
);

猜猜看,EXIT_SUCCESS 显示为 0,EXIT_FAILURE 为 1。

关于c - echo $?行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21047371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com