![옵션이 아닌 매개변수 뒤의 옵션을 구문 분석하려면 getopts를 사용하세요.](https://linux55.com/image/39238/%EC%98%B5%EC%85%98%EC%9D%B4%20%EC%95%84%EB%8B%8C%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%20%EB%92%A4%EC%9D%98%20%EC%98%B5%EC%85%98%EC%9D%84%20%EA%B5%AC%EB%AC%B8%20%EB%B6%84%EC%84%9D%ED%95%98%EB%A0%A4%EB%A9%B4%20getopts%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%84%B8%EC%9A%94..png)
파일에 아래와 같은 bash 스크립트가 있고 nepleaks_upd.sh
.bashrc로 실행하고 싶습니다 ./nepleaks_upd.sh bootstrap --branch off
. 그것을 받아들이도록 할 수는 없지만 --branch
작동합니다 ./nepleaks_upd.sh bootstrap -b off
.
usage() { echo "Usage: $0 [prepare | up | down] [-b <on/off>]" 1>&2; exit 1; }
case "$1" in
bootstrap)
while getopts ":b:" o; do
case "${o}" in
b)
b=${OPTARG}
if [ ${b} == "off" ]; then
echo "git clone https://github.com/iPrayag/dotfiles.git"
## logic
fi
;;
*)
echo ${o}
usage
;;
esac
done
shift $((OPTIND-1))
echo "option1 = ${o}"
echo "option2 = ${b}"
if [ -z "${b}" ]; then
usage
fi
;;
up)
echo "up"
##logic
;;
down)
echo "down"
##logic
;;
*)
echo "Usage: $0 {up | down} dev"
exit 1
;;
esac
처음 없이는 잘 작동합니다 case .. in .... esac
. 의 경우에는 case ... in ... esac
빈 옵션을 제공합니다 -b
.
$ ./nepleaks_upd.sh bootstrap -b off
option1 = ?
option2 =
Usage: ./nepleaks_upd.sh [bootstrap | up | down] [-b <on/off>]
답변1
getopts
구문 분석은 첫 번째 인수에서 시작하고 옵션이 아닌 첫 번째 인수에서 중지됩니다. 이는 표준 규칙입니다. 일부 GNU 유틸리티는 인수 뒤에 옵션을 허용하지만 일반적으로 somecommand foo -bar qux
옵션 -bar
으로 구문 분석되지 않습니다.
이후에 옵션 구문 분석을 시작하려면 bootstrap
이를 표시해야 합니다. 변수를 getopts
사용하여 OPTIND
위치를 기억하세요. OPTIND
값 1부터 시작합니다. 첫 번째 매개변수를 건너뛰려면 2로 설정하세요.
case "$1" in
bootstrap)
OPTIND=2
while getopts ":b:" o; do
…
또는 shift
이미 처리된 매개변수를 사용할 수도 있습니다.
subcommand=$1; shift
case "$subcommand" in
bootstrap)
while getopts ":b:" o; do
…