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

관련 정보