매개변수를 구현하는 최선의 방법이 궁금합니다 . $x
즉 $7
, 매개변수가 풍부한 함수의 마지막 매개변수를 의미합니다. 이는 "더 많은 매개변수 추가를 중지하기 위해 여기에 다양한 핵심 데이터를 입력"하는 역할을 합니까? 가능한 호출은 다음과 같습니다 afunction param1 param2 ... "MYDATA=1 OTHERDATA=true"
. 일부 데이터에 대한 여러 개의 간단한 토큰을 함수에 전달해야 하며 위치 인수를 유지할 필요가 없습니다. 특히 일부 토큰은 선택 사항이고 함수 서명의 고정 위치에 할당할 수 없기 때문입니다.
고쳐 쓰다:
Zsh 솔루션의 예는 afunc ...normal parameters... "MYDATA:1:OTHERDATA:2:"
다음과 같습니다 local mydata="${7/(#b)*MYDATA:([^:]#):*/$match[1]}"
. 복잡한 패턴 코드를 숨기는 함수를 작성할 수 있으며 다음과 같이 작동합니다 get_key "$7" "MYDATA"; local mydata=$REPLY
. 이 솔루션은 효과가 있지만 실제로 이를 조사하여 특정 방식에 가장 적합하거나 유용한 솔루션을 찾고 싶습니다.
답변1
루프를 사용하고 (나머지) 매개변수를 처리합니다 shift
. 유형 매개변수 의 경우 KEY=VALUE
다음과 같습니다(bash에서).
function foo {
shift # handle the first "fixed" arg
while [ -n "$1" ] ; do
key=${1%%=*}
val=${1#*=}
echo "key: $key value: $val"
shift
done
}
foo first MYDATA=2 OTHERDATA=false
또는 (bash 내장)을 사용하여 스타일 플래그를 getopts
구문 분석 할 수 있습니다.-x
function bar {
OPTIND=3 # skip first two args
local opt
while getopts "ab:" opt; do
if [ "$opt" = "a" ] ; then
echo flag -a encountered
elif [ "$opt" = "b" ] ; then
echo flag -b with arg $OPTARG
fi
done
}
bar fixed args -a -b foo