bash函数的搜索顺序与重载
2018-10-17 本文已影响0人
CodingCode
bash函数的搜索顺序与重载
bash里面定义了同名的函数,哪一个有效呢?
答案是:后面定义的覆盖前面定义的。
例子1:
通用函数调用。
$ cat test.sh
#!/bin/bash
function foo() {
echo "11111111"
}
foo
$ test.sh
11111111
例子2:
定义一个同名函数,后面的会覆盖前面定义的。
$ cat test.sh
#!/bin/bash
function foo() {
echo "11111111"
}
function foo() {
echo "22222222"
}
foo
$ test.sh
22222222
例子3:
调用函数定义在common模块里面(func.sh)。
$ cat func.sh
#!/bin/bash
function foo() {
echo "111111111"
}
$ cat test.sh
#!/bin/bash
. func.sh
foo
$ test.sh
111111111
例子4:
定义同名函数在common模块(func.sh)里,和外部模块(test.sh)
$ cat func.sh
#!/bin/bash
function foo() {
echo "111111111"
}
$ cat test.sh
#!/bin/bash
. func.sh
# The foo() function defined in func.sh will be override.
function foo() {
echo "22222222"
}
foo
$ test.sh
22222222
这个设计真的非常好用,有点类似函数重载的样子;比如我们在公告文件里定义common的函数,然后在各自的脚本里面,如果实现不一样,则重载common里面的函数即可。