매개변수를 추가하는 bash 스크립트

매개변수를 추가하는 bash 스크립트

인수와 매개변수가 포함된 스크립트를 만들었습니다. --help인수를 삽입하고 싶습니다 .

를 사용하여 일반 매개변수를 구문 분석하는 방법을 이미 알고 있지만 -이러한 매개변수를 구문 분석하는 방법은 모르겠습니다 --.

options 을 구문 분석하기 위해 test.sh -h다음 검사를 사용합니다.

while getopts ":h" opt; 
do 
case $opt in
    h ) {
            echo "help!!!"
            exit 1
    } ;;
esac
done

그러나 나는 그것을 사용할 수 있는 옵션이 있었으면 좋겠다 test.sh --help.

추신: 저는 Ubuntu 12.04를 사용하고 있습니다...하지만 그건 중요하지 않습니다.

답변1

getopts긴 매개변수를 처리할 수 없습니다.

$ ( set -- --help ; while getopts -- -help opt; do echo "$opt"; done )
-
h
e
l
p

긴 인수를 처리하려면 자체 파서를 작성해야 합니다.

GNU 버전getopt 하다긴 옵션의 구문 분석이 지원되지만 사용하지 않는 것이 가장 좋습니다. 이식성이 없으며 GNU가 아닌 버전은 특정 유형의 인수에서 오류가 발생하기 쉽습니다. 예를 들어 공백이 포함된 인수를 올바르게 구문 분석하지 못하는 경우가 많습니다.

답변2

질문 작성자는 다음 솔루션을 제공합니다.

/usr/bin의 .sh 스크립트 중 하나에서 솔루션을 찾았습니다.

  if test "$#" -eq 1; then
    case "$1" in
      --help | --hel | --he | --h )
        func_usage; exit 0 ;;
      --version | --versio | --versi | --vers | --ver | --ve | --v )
        func_version; exit 0 ;;
    esac
  fi

Chris Tang은 이에 대해 다음과 같이 논평했습니다.

내가 말했듯이, 긴 인수를 처리하려면 자신만의 파서를 작성해야 합니다. [찾은] 스크립트가 예입니다.

참고로 당신이 찾은 스크립트는 제대로 작성되지 않았습니다. 예를 들어, --version부분 일치는 --v*)(동의한다고 가정 --vfoo)로 다시 작성할 수 있습니다.

관련 정보