기본 매개변수 파싱 부분

기본 매개변수 파싱 부분

-h와 같은 도움말 옵션 과 기타 옵션을 추가하려는 bash 스크립트를 만들었습니다 .--help--verbose

설명대로 만들면여기이것이 표준 솔루션이 될까요?

# Execute getopt on the arguments passed to this program, identified by the special character $@
PARSED_OPTIONS=$(getopt -n "$0"  -o h123: --long "help,one,two,three:"  -- "$@")

#Bad arguments, something has gone wrong with the getopt command.
if [ $? -ne 0 ];
then
  exit 1
fi

# A little magic, necessary when using getopt.
eval set -- "$PARSED_OPTIONS"


# Now goes through all the options with a case and using shift to analyse 1 argument at a time.
#$1 identifies the first argument, and when we use shift we discard the first argument, so $2 becomes $1 and goes again through the case.
while true;
do
  case "$1" in

    -h|--help)
      echo "usage $0 -h -1 -2 -3 or $0 --help --one --two --three"
     shift;;

    -1|--one)
      echo "One"
      shift;;

    -2|--two)
      echo "Dos"
      shift;;

    -3|--three)
      echo "Tre"

      # We need to take the option of the argument "three"
      if [ -n "$2" ];
      then
        echo "Argument: $2"
      fi
      shift 2;;

    --)
      shift
      break;;
  esac
done

아니면 이를 달성하기 위한 또 다른 정의된 방법이 있습니까?

답변1

case실제로 쉘 스크립터가 귀하와 매우 유사한 방식으로 명령문을 사용하여 자체 매개변수 구문 분석을 작성하는 것이 일반적입니다. 이제 그것이 최고의 솔루션인지 가장 표준적인 솔루션인지는 논쟁의 여지가 있습니다. 개인적으로 C에 대한 경험으로 인해 getopt.

getopt.1매뉴얼 페이지 에서 :

getopt는 쉘 프로세스가 옵션을 쉽게 구문 분석하고 적합한 옵션을 확인할 수 있도록 명령줄에서 옵션을 분석(분석)하는 데 사용됩니다. 이를 수행하기 위해 GNU getopt(3) 루틴을 사용합니다.

당신이 전화를 했다면 getopt, 당신은 확실히 올바른 길을 가고 있다고 말하고 싶습니다. 원하는 경우 문을 사용하여 명령줄 인수를 반복하여 case이러한 경우를 처리할 수 있지만 이미 알고 있듯이 getopt실제로는 모든 무거운 작업을 수행합니다.


핵심요약: 이것은 쉘 스크립트이므로 원하는 방식으로 구현할 수 있지만 getopt유용합니다.

관련 정보