인수를 전달하는 bash 함수를 사용하고 있습니다. 사용자가 특정 옵션을 정의 -v NUM
했는지 여부를 캡처하고 싶습니다 --verbosity=NUM
. 설명대로 정의한 경우 로컬 변수 vb
를 NUM
.
답변1
내가 가장 먼저 말하고 싶은 것은 GNU 스타일의 긴 옵션을 허용하는 것이 목표라고 가정하면 그러한 인수를 맹목적으로 스캔해도 자세한 내용을 지정하는 유효한 방법을 모두 찾을 수 없다는 것입니다.
사용자가 -xyv3
(와 동일 -x
-y
-v
3
) 또는 ( 옵션에 대한 인수가 어디에 있는지 --output
-v2
와 동일 ) 또는 ( 옵션으로 간주되지 않는 위치) 또는 (GNU 옵션 스타일 구문 분석에서 지원되는 약어)를 전달하면 어떻게 되나요? /는 옵션을 올바르게 구문 분석하는 데 도움이 됩니다.--output=-v2
-v2
--output
cmd
-x
--
foo
bar
-v
baz
-v
--verb=12
getopt
getopts
그러나 적절한 옵션 구문 분석에 신경 쓰지 않고 해당 문자열을 옵션이 아닌 인수로 전달하는 대신 사용자가 항상 이와 같은 -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
...
}