What is the difference between the terms “program”, “command” and “function” in Linux & Unix?

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP











up vote
4
down vote

favorite












I would like to know whether the commands that we call in the shell are functions or programs?










share|improve this question









New contributor




Lion is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.















  • 1




    What distinction are you making between "small program" and "function"?
    – JdeBP
    4 hours ago










  • What practical difference do you see this making?
    – Jeff Schaller
    3 hours ago














up vote
4
down vote

favorite












I would like to know whether the commands that we call in the shell are functions or programs?










share|improve this question









New contributor




Lion is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.















  • 1




    What distinction are you making between "small program" and "function"?
    – JdeBP
    4 hours ago










  • What practical difference do you see this making?
    – Jeff Schaller
    3 hours ago












up vote
4
down vote

favorite









up vote
4
down vote

favorite











I would like to know whether the commands that we call in the shell are functions or programs?










share|improve this question









New contributor




Lion is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











I would like to know whether the commands that we call in the shell are functions or programs?







shell command-line function bash-functions






share|improve this question









New contributor




Lion is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




Lion is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited 14 mins ago









RonJohn

485213




485213






New contributor




Lion is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 5 hours ago









Lion

271




271




New contributor




Lion is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Lion is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Lion is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







  • 1




    What distinction are you making between "small program" and "function"?
    – JdeBP
    4 hours ago










  • What practical difference do you see this making?
    – Jeff Schaller
    3 hours ago












  • 1




    What distinction are you making between "small program" and "function"?
    – JdeBP
    4 hours ago










  • What practical difference do you see this making?
    – Jeff Schaller
    3 hours ago







1




1




What distinction are you making between "small program" and "function"?
– JdeBP
4 hours ago




What distinction are you making between "small program" and "function"?
– JdeBP
4 hours ago












What practical difference do you see this making?
– Jeff Schaller
3 hours ago




What practical difference do you see this making?
– Jeff Schaller
3 hours ago










3 Answers
3






active

oldest

votes

















up vote
7
down vote













It depends.



Commands can fall into multiple categories: builtins, aliases,
functions, executables (scripts and binaries in the search path).



On the command line, these occupy a single, flat namespace which
makes overriding possible. There are numerous ways of telling
kinds of programs apart:



$ f () :; 
$ alias a=cat
$ which f
f ()

:



We know that f is a function.



$ which a
alias a='cat'
/usr/bin/cat


We know that a is an alias.



$ which yes
/usr/bin/yes


We know that yes is a program.



$ builtin echo ; echo $?

0


The shell has an echo builtin …



$ builtin cat ; echo $?
bash: builtin: cat: not a shell builtin
1


… but none for cat. If there is a builtin or an alias
but you insist on calling the program instead, prefix the
command with a backslash:



$ builtin true | printf "%dn" $?
0
$ alias true=false
$ true ; printf "%dn" $?
1
$ true ; printf "%dn" $?
0





share|improve this answer




















  • Also, a command that's a program in one implementation of *nix might well become a shell builtin (= function) in another.
    – jamesqf
    1 hour ago

















up vote
5
down vote













The definition of a function are returning single values, and does not output anything. Shell functions in particular may very well and could have an output or other side effects, since the return value of functions is so limited.



A command is an instruction given by a user to tell a computer to do something, for example, executing a single program or a group of linked programs.



A program is a sequence of instructions (i.e. commands) that re given to a computer and understandable by the computer's central processing unit (CPU). these instructions indicates which operations the computer should perform on a set of data.



Having said that, functions are a logical subset of the program. Calling one is entirely within your process. The command is a program (or a shell built-in) can be executed from the command shell. The command implements functions which perform a task. The opposite is not correct.






share|improve this answer


















  • 4




    "a function returns a single value, and does not output anything" -- well, yeah, in the mathematical sense maybe. But in imperative programming languages, it's really common for "function" to mean just a subroutine, one that could do anything. And shell functions in particular may very well have output or other side effects, since the return value of functions is so limited.
    – ilkkachu
    4 hours ago










  • @ilkkachu. Thank you. I have updated the answer. Please feel free to revise ;-)
    – Goro
    4 hours ago

















up vote
0
down vote














I would like to know whether the commands that we call in the shell are functions or programs?




Yes.



Specifically, when you type in some text and press enter, the shell must determine whether it's:



  1. an alias,

  2. a function,

  3. a built-in command,

  4. an executable file (and then whether or not it's a binary program or a script).




share




















    Your Answer







    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "106"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    convertImagesToLinks: false,
    noModals: false,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );






    Lion is a new contributor. Be nice, and check out our Code of Conduct.









     

    draft saved


    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f468764%2fwhat-is-the-difference-between-the-terms-program-command-and-function-in%23new-answer', 'question_page');

    );

    Post as a guest






























    3 Answers
    3






    active

    oldest

    votes








    3 Answers
    3






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    7
    down vote













    It depends.



    Commands can fall into multiple categories: builtins, aliases,
    functions, executables (scripts and binaries in the search path).



    On the command line, these occupy a single, flat namespace which
    makes overriding possible. There are numerous ways of telling
    kinds of programs apart:



    $ f () :; 
    $ alias a=cat
    $ which f
    f ()

    :



    We know that f is a function.



    $ which a
    alias a='cat'
    /usr/bin/cat


    We know that a is an alias.



    $ which yes
    /usr/bin/yes


    We know that yes is a program.



    $ builtin echo ; echo $?

    0


    The shell has an echo builtin …



    $ builtin cat ; echo $?
    bash: builtin: cat: not a shell builtin
    1


    … but none for cat. If there is a builtin or an alias
    but you insist on calling the program instead, prefix the
    command with a backslash:



    $ builtin true | printf "%dn" $?
    0
    $ alias true=false
    $ true ; printf "%dn" $?
    1
    $ true ; printf "%dn" $?
    0





    share|improve this answer




















    • Also, a command that's a program in one implementation of *nix might well become a shell builtin (= function) in another.
      – jamesqf
      1 hour ago














    up vote
    7
    down vote













    It depends.



    Commands can fall into multiple categories: builtins, aliases,
    functions, executables (scripts and binaries in the search path).



    On the command line, these occupy a single, flat namespace which
    makes overriding possible. There are numerous ways of telling
    kinds of programs apart:



    $ f () :; 
    $ alias a=cat
    $ which f
    f ()

    :



    We know that f is a function.



    $ which a
    alias a='cat'
    /usr/bin/cat


    We know that a is an alias.



    $ which yes
    /usr/bin/yes


    We know that yes is a program.



    $ builtin echo ; echo $?

    0


    The shell has an echo builtin …



    $ builtin cat ; echo $?
    bash: builtin: cat: not a shell builtin
    1


    … but none for cat. If there is a builtin or an alias
    but you insist on calling the program instead, prefix the
    command with a backslash:



    $ builtin true | printf "%dn" $?
    0
    $ alias true=false
    $ true ; printf "%dn" $?
    1
    $ true ; printf "%dn" $?
    0





    share|improve this answer




















    • Also, a command that's a program in one implementation of *nix might well become a shell builtin (= function) in another.
      – jamesqf
      1 hour ago












    up vote
    7
    down vote










    up vote
    7
    down vote









    It depends.



    Commands can fall into multiple categories: builtins, aliases,
    functions, executables (scripts and binaries in the search path).



    On the command line, these occupy a single, flat namespace which
    makes overriding possible. There are numerous ways of telling
    kinds of programs apart:



    $ f () :; 
    $ alias a=cat
    $ which f
    f ()

    :



    We know that f is a function.



    $ which a
    alias a='cat'
    /usr/bin/cat


    We know that a is an alias.



    $ which yes
    /usr/bin/yes


    We know that yes is a program.



    $ builtin echo ; echo $?

    0


    The shell has an echo builtin …



    $ builtin cat ; echo $?
    bash: builtin: cat: not a shell builtin
    1


    … but none for cat. If there is a builtin or an alias
    but you insist on calling the program instead, prefix the
    command with a backslash:



    $ builtin true | printf "%dn" $?
    0
    $ alias true=false
    $ true ; printf "%dn" $?
    1
    $ true ; printf "%dn" $?
    0





    share|improve this answer












    It depends.



    Commands can fall into multiple categories: builtins, aliases,
    functions, executables (scripts and binaries in the search path).



    On the command line, these occupy a single, flat namespace which
    makes overriding possible. There are numerous ways of telling
    kinds of programs apart:



    $ f () :; 
    $ alias a=cat
    $ which f
    f ()

    :



    We know that f is a function.



    $ which a
    alias a='cat'
    /usr/bin/cat


    We know that a is an alias.



    $ which yes
    /usr/bin/yes


    We know that yes is a program.



    $ builtin echo ; echo $?

    0


    The shell has an echo builtin …



    $ builtin cat ; echo $?
    bash: builtin: cat: not a shell builtin
    1


    … but none for cat. If there is a builtin or an alias
    but you insist on calling the program instead, prefix the
    command with a backslash:



    $ builtin true | printf "%dn" $?
    0
    $ alias true=false
    $ true ; printf "%dn" $?
    1
    $ true ; printf "%dn" $?
    0






    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered 5 hours ago









    phg

    537415




    537415











    • Also, a command that's a program in one implementation of *nix might well become a shell builtin (= function) in another.
      – jamesqf
      1 hour ago
















    • Also, a command that's a program in one implementation of *nix might well become a shell builtin (= function) in another.
      – jamesqf
      1 hour ago















    Also, a command that's a program in one implementation of *nix might well become a shell builtin (= function) in another.
    – jamesqf
    1 hour ago




    Also, a command that's a program in one implementation of *nix might well become a shell builtin (= function) in another.
    – jamesqf
    1 hour ago












    up vote
    5
    down vote













    The definition of a function are returning single values, and does not output anything. Shell functions in particular may very well and could have an output or other side effects, since the return value of functions is so limited.



    A command is an instruction given by a user to tell a computer to do something, for example, executing a single program or a group of linked programs.



    A program is a sequence of instructions (i.e. commands) that re given to a computer and understandable by the computer's central processing unit (CPU). these instructions indicates which operations the computer should perform on a set of data.



    Having said that, functions are a logical subset of the program. Calling one is entirely within your process. The command is a program (or a shell built-in) can be executed from the command shell. The command implements functions which perform a task. The opposite is not correct.






    share|improve this answer


















    • 4




      "a function returns a single value, and does not output anything" -- well, yeah, in the mathematical sense maybe. But in imperative programming languages, it's really common for "function" to mean just a subroutine, one that could do anything. And shell functions in particular may very well have output or other side effects, since the return value of functions is so limited.
      – ilkkachu
      4 hours ago










    • @ilkkachu. Thank you. I have updated the answer. Please feel free to revise ;-)
      – Goro
      4 hours ago














    up vote
    5
    down vote













    The definition of a function are returning single values, and does not output anything. Shell functions in particular may very well and could have an output or other side effects, since the return value of functions is so limited.



    A command is an instruction given by a user to tell a computer to do something, for example, executing a single program or a group of linked programs.



    A program is a sequence of instructions (i.e. commands) that re given to a computer and understandable by the computer's central processing unit (CPU). these instructions indicates which operations the computer should perform on a set of data.



    Having said that, functions are a logical subset of the program. Calling one is entirely within your process. The command is a program (or a shell built-in) can be executed from the command shell. The command implements functions which perform a task. The opposite is not correct.






    share|improve this answer


















    • 4




      "a function returns a single value, and does not output anything" -- well, yeah, in the mathematical sense maybe. But in imperative programming languages, it's really common for "function" to mean just a subroutine, one that could do anything. And shell functions in particular may very well have output or other side effects, since the return value of functions is so limited.
      – ilkkachu
      4 hours ago










    • @ilkkachu. Thank you. I have updated the answer. Please feel free to revise ;-)
      – Goro
      4 hours ago












    up vote
    5
    down vote










    up vote
    5
    down vote









    The definition of a function are returning single values, and does not output anything. Shell functions in particular may very well and could have an output or other side effects, since the return value of functions is so limited.



    A command is an instruction given by a user to tell a computer to do something, for example, executing a single program or a group of linked programs.



    A program is a sequence of instructions (i.e. commands) that re given to a computer and understandable by the computer's central processing unit (CPU). these instructions indicates which operations the computer should perform on a set of data.



    Having said that, functions are a logical subset of the program. Calling one is entirely within your process. The command is a program (or a shell built-in) can be executed from the command shell. The command implements functions which perform a task. The opposite is not correct.






    share|improve this answer














    The definition of a function are returning single values, and does not output anything. Shell functions in particular may very well and could have an output or other side effects, since the return value of functions is so limited.



    A command is an instruction given by a user to tell a computer to do something, for example, executing a single program or a group of linked programs.



    A program is a sequence of instructions (i.e. commands) that re given to a computer and understandable by the computer's central processing unit (CPU). these instructions indicates which operations the computer should perform on a set of data.



    Having said that, functions are a logical subset of the program. Calling one is entirely within your process. The command is a program (or a shell built-in) can be executed from the command shell. The command implements functions which perform a task. The opposite is not correct.







    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited 4 hours ago

























    answered 5 hours ago









    Goro

    1,65441644




    1,65441644







    • 4




      "a function returns a single value, and does not output anything" -- well, yeah, in the mathematical sense maybe. But in imperative programming languages, it's really common for "function" to mean just a subroutine, one that could do anything. And shell functions in particular may very well have output or other side effects, since the return value of functions is so limited.
      – ilkkachu
      4 hours ago










    • @ilkkachu. Thank you. I have updated the answer. Please feel free to revise ;-)
      – Goro
      4 hours ago












    • 4




      "a function returns a single value, and does not output anything" -- well, yeah, in the mathematical sense maybe. But in imperative programming languages, it's really common for "function" to mean just a subroutine, one that could do anything. And shell functions in particular may very well have output or other side effects, since the return value of functions is so limited.
      – ilkkachu
      4 hours ago










    • @ilkkachu. Thank you. I have updated the answer. Please feel free to revise ;-)
      – Goro
      4 hours ago







    4




    4




    "a function returns a single value, and does not output anything" -- well, yeah, in the mathematical sense maybe. But in imperative programming languages, it's really common for "function" to mean just a subroutine, one that could do anything. And shell functions in particular may very well have output or other side effects, since the return value of functions is so limited.
    – ilkkachu
    4 hours ago




    "a function returns a single value, and does not output anything" -- well, yeah, in the mathematical sense maybe. But in imperative programming languages, it's really common for "function" to mean just a subroutine, one that could do anything. And shell functions in particular may very well have output or other side effects, since the return value of functions is so limited.
    – ilkkachu
    4 hours ago












    @ilkkachu. Thank you. I have updated the answer. Please feel free to revise ;-)
    – Goro
    4 hours ago




    @ilkkachu. Thank you. I have updated the answer. Please feel free to revise ;-)
    – Goro
    4 hours ago










    up vote
    0
    down vote














    I would like to know whether the commands that we call in the shell are functions or programs?




    Yes.



    Specifically, when you type in some text and press enter, the shell must determine whether it's:



    1. an alias,

    2. a function,

    3. a built-in command,

    4. an executable file (and then whether or not it's a binary program or a script).




    share
























      up vote
      0
      down vote














      I would like to know whether the commands that we call in the shell are functions or programs?




      Yes.



      Specifically, when you type in some text and press enter, the shell must determine whether it's:



      1. an alias,

      2. a function,

      3. a built-in command,

      4. an executable file (and then whether or not it's a binary program or a script).




      share






















        up vote
        0
        down vote










        up vote
        0
        down vote










        I would like to know whether the commands that we call in the shell are functions or programs?




        Yes.



        Specifically, when you type in some text and press enter, the shell must determine whether it's:



        1. an alias,

        2. a function,

        3. a built-in command,

        4. an executable file (and then whether or not it's a binary program or a script).




        share













        I would like to know whether the commands that we call in the shell are functions or programs?




        Yes.



        Specifically, when you type in some text and press enter, the shell must determine whether it's:



        1. an alias,

        2. a function,

        3. a built-in command,

        4. an executable file (and then whether or not it's a binary program or a script).





        share











        share


        share










        answered 5 mins ago









        RonJohn

        485213




        485213




















            Lion is a new contributor. Be nice, and check out our Code of Conduct.









             

            draft saved


            draft discarded


















            Lion is a new contributor. Be nice, and check out our Code of Conduct.












            Lion is a new contributor. Be nice, and check out our Code of Conduct.











            Lion is a new contributor. Be nice, and check out our Code of Conduct.













             


            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f468764%2fwhat-is-the-difference-between-the-terms-program-command-and-function-in%23new-answer', 'question_page');

            );

            Post as a guest













































































            Comments

            Popular posts from this blog

            How to decode/decipher Mozilla Firefox proprietary .jsonlz4 format? (sessionstore-backups/recovery.jsonlz4)

            White Anglo-Saxon Protestant

            How to be valuable when automation & IT are stealing my job (and maybe my whole career)? [closed]