다음은 모든 스크립트의 맨 위에 붙여 넣을 수있는 일반화 된 간단한 명령 인수 인터페이스입니다.
#!/bin/bash
declare -A flags
declare -A booleans
args=()
while [ "$1" ];
do
arg=$1
if [ "${1:0:1}" == "-" ]
then
shift
rev=$(echo "$arg" | rev)
if [ -z "$1" ] || [ "${1:0:1}" == "-" ] || [ "${rev:0:1}" == ":" ]
then
bool=$(echo ${arg:1} | sed s/://g)
booleans[$bool]=true
echo \"$bool\" is boolean
else
value=$1
flags[${arg:1}]=$value
shift
echo \"$arg\" is flag with value \"$value\"
fi
else
args+=("$arg")
shift
echo \"$arg\" is an arg
fi
done
echo -e "\n"
echo booleans: ${booleans[@]}
echo flags: ${flags[@]}
echo args: ${args[@]}
echo -e "\nBoolean types:\n\tPrecedes Flag(pf): ${booleans[pf]}\n\tFinal Arg(f): ${booleans[f]}\n\tColon Terminated(Ct): ${booleans[Ct]}\n\tNot Mentioned(nm): ${boolean[nm]}"
echo -e "\nFlag: myFlag => ${flags["myFlag"]}"
echo -e "\nArgs: one: ${args[0]}, two: ${args[1]}, three: ${args[2]}"
다음 명령을 실행합니다.
bashScript.sh firstArg -pf -myFlag "my flag value" secondArg -Ct: thirdArg -f
출력은 다음과 같습니다.
"firstArg" is an arg
"pf" is boolean
"-myFlag" is flag with value "my flag value"
"secondArg" is an arg
"Ct" is boolean
"thirdArg" is an arg
"f" is boolean
booleans: true true true
flags: my flag value
args: firstArg secondArg thirdArg
Boolean types:
Precedes Flag(pf): true
Final Arg(f): true
Colon Terminated(Ct): true
Not Mentioned(nm):
Flag: myFlag => my flag value
Args: one => firstArg, two => secondArg, three => thirdArg
기본적으로 인수는 플래그 부울 및 일반 인수로 나뉩니다. 이렇게하면 사용자가 지정된 순서대로 일반 인수 (있는 경우)를 유지하는 한 플래그와 부울을 어디에나 둘 수 있습니다.
저와 지금은 bash 인수 구문 분석을 다시는 다루지 않도록 허용합니다!
여기 에서 업데이트 된 스크립트를 볼 수 있습니다.
이것은 작년에 엄청나게 유용했습니다. 이제 변수 앞에 범위 매개 변수를 붙여 범위를 시뮬레이션 할 수 있습니다.
다음과 같이 스크립트를 호출하십시오.
replace() (
source $FUTIL_REL_DIR/commandParser.sh -scope ${FUNCNAME[0]} "$@"
echo ${replaceFlags[f]}
echo ${replaceBooleans[b]}
)
인수 범위를 구현 한 것처럼 보이지 않지만 아직 필요하지 않은 이유가 확실하지 않습니다.