Getopts 不在函数内部工作

Getopts 不在函数内部工作

我正在尝试在函数中使用getops,但它似乎不起作用:

#!/bin/bash

function main()
{
  while getopts ":p:t:c:b:" o; do
    case "${o}" in
    p)
      echo "GOt P"
      p=$OPTARG
      ;;
    t)
      echo "GOt T"
      t=$OPTARG
      ;;
    c)
      echo "GOt C"
      c=$OPTARG
      ;;
    b)
      echo "GOt b"
      b=$OPTARG
      ;;
    *)
      #usage 
      echo "Unknown Option"
      return 
      ;;
      esac
  done

  echo $p
  echo $t
  echo $c
  echo $b
}

main

然后像这样运行它:

$ ./bin/testArguments.sh -p . -t README.md -c 234 -b 1

我尝试确保 optid 是本地的,但这也不起作用。还有什么可能是错误的吗?

答案1

您没有向您的main函数传递任何参数。如果您希望该函数获得与传递给脚本相同的参数,请将它们与以下内容一起传递:

main "$@"

代替:

main

也与您的脚本相关:

答案2

在函数中,参数是传递给函数的参数,而不是传递给脚本的参数:

$ cat foo.sh
function main ()
{
    echo "$@"
}

echo "$@"
main
$ bash foo.sh bar
bar

$

您需要传递"$@"main

main "$@"

尽管我发现main脚本中的函数相当无用,除非您愿意main在同一个脚本中一次又一次地调用。

相关内容