Bash script error: “function: not found”. Why would this appear?

前端 未结 4 1119
轮回少年
轮回少年 2020-12-08 00:09

I\'m trying to run a bash script on my Ubuntu machine and it is giving me an error:

function not found

To test, I

相关标签:
4条回答
  • 2020-12-08 00:19

    Doesn't it require () after function name, or at the call?

    function sayIt() { ...
    }
    
    sayIt()
    

    ? :)

    Hmm, actually, on MY mac, it works just as you pasted..

    dtpwmbp:~ pwadas$ cat aa.sh 
    #!/bin/bash
    
    function sayIt() {   
       echo "hello world"
    }
    
    sayIt
    
    dtpwmbp:~ pwadas$ ./aa.sh 
    hello world
    dtpwmbp:~ pwadas$ 
    

    Compare bash version, AFAIR some older version required "()"s.

    dtpwmbp:~ pwadas$ bash --version
    GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12)
    Copyright (C) 2007 Free Software Foundation, Inc.
    dtpwmbp:~ pwadas$ 
    

    Also compare state of shopt options ( man bash ), on both shells, maybe one of them have some compat syntax turned on or off ? "shopt" command without args will list state of options supported.

    What is the 'function' keyword used in some bash scripts?

    0 讨论(0)
  • 2020-12-08 00:27

    I faced the same problem, I then modified the syntax and it worked for me. Try to remove the keyword function and add brackets () after the function name.

    #!/bin/bash
    
    sayIt()
    {   
       echo "hello world"
    }
    
    sayIt
    
    0 讨论(0)
  • 2020-12-08 00:35

    ls -la /bin/sh

    check the sym link where it point to bash or dash

    0 讨论(0)
  • 2020-12-08 00:41

    Chances are that on your desktop you are not actually running under bash but rather dash or some other POSIX-compliant shell that does not recognize the function keyword. The function keyword is a bashism, a bash extension. POSIX syntax does not use function and mandates the use of parenthesis.

    $ more a.sh
    #!/bin/sh
    
    function sayIt {   
       echo "hello world"
    }
    
    sayIt
    $ bash a.sh
    hello world
    $ dash a.sh
    a.sh: 3: function: not found
    hello world
    a.sh: 5: Syntax error: "}" unexpected
    

    The POSIX-syntax works in both:

    $ more b.sh
    #!/bin/sh
    
    sayIt () {   
       echo "hello world"
    }
    
    sayIt
    $ bash b.sh
    hello world
    $ dash b.sh
    hello world
    
    0 讨论(0)
提交回复
热议问题