함수 인수 목록에서 자세한 수준 설정

함수 인수 목록에서 자세한 수준 설정

인수를 전달하는 bash 함수를 사용하고 있습니다. 사용자가 특정 옵션을 정의 -v NUM했는지 여부를 캡처하고 싶습니다 --verbosity=NUM. 설명대로 정의한 경우 로컬 변수 vbNUM.

답변1

내가 가장 먼저 말하고 싶은 것은 GNU 스타일의 긴 옵션을 허용하는 것이 목표라고 가정하면 그러한 인수를 맹목적으로 스캔해도 자세한 내용을 지정하는 유효한 방법을 모두 찾을 수 없다는 것입니다.

사용자가 -xyv3(와 동일 -x -y -v 3) 또는 ( 옵션에 대한 인수가 어디에 있는지 --output -v2와 동일 ) 또는 ( 옵션으로 간주되지 않는 위치) 또는 (GNU 옵션 스타일 구문 분석에서 지원되는 약어)를 전달하면 어떻게 되나요? /는 옵션을 올바르게 구문 분석하는 데 도움이 됩니다.--output=-v2-v2--outputcmd -x -- foo bar -v baz-v--verb=12getoptgetopts

그러나 적절한 옵션 구문 분석에 신경 쓰지 않고 해당 문자열을 옵션이 아닌 인수로 전달하는 대신 사용자가 항상 이와 같은 -v/ --verbosity옵션을 전달하도록 의존할 수 있는 경우 다음을 수행할 수 있습니다.

extract_verbosity() {
  unset -v REPLY
  while [ "$#" -gt 0 ]; do
    case "$1" in
      (-v)
        [ "$#" -gt 1 ] || break
        shift; REPLY=$1
      ;;
         
      (--verbosity=*)
        REPLY=${1#*=}
    esac
    shift
  done
  [ -n "${REPLY+set}" ]
}

그런 다음 귀하의 기능에서 :

my_function() {
  verbosity=0 # default
  extract_verbosity "$@" && verbosity=$REPLY
  ...
}

관련 정보