![기능 도움말 옵션 추가](https://linux55.com/image/15770/%EA%B8%B0%EB%8A%A5%20%EB%8F%84%EC%9B%80%EB%A7%90%20%EC%98%B5%EC%85%98%20%EC%B6%94%EA%B0%80.png)
NUM
파일 세트의 시작 부분부터 줄을 인쇄하는 다음 기능이 있습니다 .
명령(함수, 스크립트 등)은 다양한 수의 인수를 허용하며 "사용 방법을 알려주십시오"에 대한 특수 옵션을 유지하고 싶습니다. 전통적인 선택은 "help", "-h", "-입니다. ?" 및 "--" 도움말".
headrc ()
{
# Prints first set of lines from named files.
# $1 NUM Number of lines to print
# $2 DIR Directory
num=$1
dir=$2
find "$dir" \( -name \*.org -o -name \*.texi \) \
| xargs head -n "$num";
}
답변1
이 작업은 수동으로 수행할 수도 있지만 getopt
를 사용하는 것이 더 유용합니다. 예를 들어 다음을 고려하십시오.
#!/bin/bash
# Prints first set of lines from named files.
# $1 NUM Number of lines to print
# $2 DIR Directory
headrc() {
eval set -- $(getopt --name "${FUNCNAME[0]}" --options h --longoptions help -- "${@}")
while [[ "${1}" != "--" ]]; do
case "${1}" in
-h | --help)
printf "Usage: ${FUNCNAME[0]} [-h|--help] <args>\n"
return 1
;;
*)
printf "Unknown option: ${1}\n"
;;
esac
shift # Shift off option
done
shift # Shift off --
local -r num="${1}"
local -r dir="${2}"
find "${dir}" \( -name \*.org -o -name \*.texi \) | xargs head -n "${num}";
}
이 getopt
도구는 기존 인수( ${@}
)와 사용자가 제공한 옵션을 사용하여 모든 옵션이 먼저 오고 그 다음 a --
, 다른 모든 옵션이 오도록 재정렬합니다. 이 --options
옵션은 단일 문자 옵션과 --longoptions
"긴"(다중 문자) 옵션을 지정합니다.
예를 들어:
$ getopt --options fh --longoptions file,help -- a b c -f d e --help g
-f --help -- 'a' 'b' 'c' 'd' 'e' 'g'
매개 getopt
변수가 있는 옵션을 지원하지만 여기서는 필요하지 않으므로 도구의 해당 측면을 다루지 않았습니다.
인수를 지정된 값으로 업데이트하여 eval set --
함수를 해당 인수의 내용을 다시 작성한 출력으로 처리합니다 getopt
.
옵션을 반복 while
하고, 만나면 중지됩니다 --
. see -h
또는 --help
도움말 메시지를 인쇄하고 반환합니다. 루프를 처리할 때마다 shift
첫 번째 인수를 "닫는" 데 사용됩니다 .
이를 찾으면 --
루프를 중지하고 매개변수를 전송합니다.
이제 넌 다 가졌어뒤쪽에옵션이므로 이전과 같이 위치 인수를 사용할 수 있습니다.