当编写bash脚本时,脚本如何知道要调用哪个usage()?

当编写bash脚本时,脚本如何知道要调用哪个usage()?

假设我编写了一个 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 $@.

相关内容