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

関連情報