如何判断shell命令是程序还是函数?

如何判断shell命令是程序还是函数?

我想知道是否命令我们在 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 必须确定它是否:

  1. 一个alias
  2. 一个函数,
  3. 一个内置命令,
  4. 一个可执行文件。

相关内容