假设我编写了一个 bash 函数,如下所示:
函数.sh
usage () {echo "No arguments are needed";}
myfunction () {
if [[ $# -qt 0 ]] ;
then
usage
fi
echo "Hello World"
}
然后我source function.sh
。但是,我也在那里定义了另一个脚本usage()
,并且我也获取了它。
我跑过去myfunction -myWorld
,拨打usage()
电话,它以某种方式拨打了正确的电话。
bash 如何知道该usage()
调用哪一个?
答案1
你的问题的答案,就目前而言,是 Bash 调用最后定义的版本的函数。
使用示例的两个修改版本:
function1.sh
usage () { echo "Usage from function1.sh - No arguments are needed"; }
myfunction1 () {
if [[ $# -gt 0 ]] ;
then
usage
fi
echo "Hello World"
}
function2.sh
usage () { echo "Usage from function2.sh - No arguments are needed"; }
myfunction2 () {
if [[ $# -gt 0 ]] ;
then
usage
fi
echo "Hello World"
}
然后运行
$ source function1.sh
$ source function2.sh
$ usage
将给出输出
Usage from function2.sh - No arguments are needed
请注意,在您的脚本中:
-qt
应该是-gt
,并且;usage()
- 周围缺少一些空格echo
答案2
我不想剥夺我上面的海报作为正确答案,因为他直接回答了我的问题。
不过,我确实想发布后续内容。
我没有将函数作为源代码,而是将 function.sh 所在的目录添加到 PATH 中,并将该文件重命名为 myfunction。文件 myfunction 的最后一行是myfunction $@
.