![如何判断shell命令是程序还是函数?](https://linux22.com/image/140077/%E5%A6%82%E4%BD%95%E5%88%A4%E6%96%ADshell%E5%91%BD%E4%BB%A4%E6%98%AF%E7%A8%8B%E5%BA%8F%E8%BF%98%E6%98%AF%E5%87%BD%E6%95%B0%EF%BC%9F.png)
我想知道是否命令我们在 shell 中调用的是 功能或者程式。
答案1
这取决于。
命令可以分为多个类别:内置命令、别名、函数、可执行文件(搜索路径中的脚本和二进制文件)。
在命令行上,它们占据一个单一的、平面的命名空间,这使得覆盖成为可能。有多种方法可以区分不同类型的程序:
$ f () { :; }
$ alias a=cat
$ which f
f ()
{
:
}
我们知道这f
是一个函数。
$ which a
alias a='cat'
/usr/bin/cat
我们知道这a
是一个别名。
$ which yes
/usr/bin/yes
我们知道这yes
是一个程序。
$ builtin echo ; echo $?
0
外壳有一个echo
内置的…
$ builtin cat ; echo $?
bash: builtin: cat: not a shell builtin
1
…但没有一个cat
。如果有内置函数或别名,但您坚持调用该程序,请在命令前面加上反斜杠:
$ builtin true | printf "%d\n" $?
0
$ alias true=false
$ true ; printf "%d\n" $?
1
$ \true ; printf "%d\n" $?
0
答案2
a 的定义function
返回单个值,并且不输出任何内容。特别是 Shell 函数,可能会产生输出或其他副作用,因为函数的返回值非常有限。
Acommand
是用户发出的指令,告诉计算机做某事,例如执行单个程序或一组链接的程序。
Aprogram
是给予计算机并且可由计算机的中央处理单元(CPU)理解的指令序列(即命令)。这些指令指示计算机应对一组数据执行哪些操作。
话虽如此,functions
它们是程序的逻辑子集。呼叫某人完全在您的流程之内。这command
是一个可以从命令 shell 执行的程序(或内置 shell)。该命令实现执行任务的函数。反之则不正确。
答案3
我想知道我们在shell中调用的命令是函数还是程序?
是的。
具体来说,当您输入一些文本并按 时enter
,shell 必须确定它是否:
- 一个
alias
, - 一个函数,
- 一个内置命令,
- 一个可执行文件。