上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.3.3 它是如何工作的
请注意,在C语言中,0被视为假(或错误),而其他任何值都被视为真(或正确)。这恰恰与shell的返回值相反。一开始这可能会有点让人困惑。但不管怎样,就shell而言,0表示“一切正常”,而其他值则表示错误。
上述两个版本的区别在于函数和整个程序的返回方式。在第一个版本中,每个函数会依次返回到调用它的函数中——按照它们被调用的顺序。而在第二个版本中,每个函数使用exit()函数退出,这意味着程序将直接退出,并将指定的值返回给shell。第二个版本的做法不是很好,最好的做法是返回到调用它的函数。究其原因,如果其他人在另一个程序中使用了你的函数,而它突然使整个程序退出了,这将会是一个巨大的“惊喜”。我们通常不会这么做。但是,我仍旧想在这里演示一下exit()和return的区别。
我还想另外说明一点:就像一个函数使用return返回到调用它的函数一样,一个程序也是以同样的方式返回到它的父进程(通常是shell)。因此,在某种程度上,Linux系统中的程序也被视为程序中的一个函数。
图2.1展示了Bash如何调用一个程序(如上方的箭头所示),从main()开始,main()调用下一个函数(如右边的箭头所示),以此类推。左边返回的箭头显示了每个函数如何返回到调用它的函数,最后返回到Bash。
图2.1 调用与返回