![Case 문의 동적 패턴 문자열](https://linux55.com/image/219232/Case%20%EB%AC%B8%EC%9D%98%20%EB%8F%99%EC%A0%81%20%ED%8C%A8%ED%84%B4%20%EB%AC%B8%EC%9E%90%EC%97%B4.png)
다음과 같은 옵션 목록이 있습니다.
opts="-p,--plong,-q,--qlong"
문자열을 두 개의 다른 문자열로 분할했습니다. 하나는 단기 옵션용이고 다른 하나는 장기 옵션용입니다.
ops="" opl=""
for kl in ${opts//,/ }; do
if [[ "$kl" == --* ]]; then
opl="${opl},${kl}" # Short Options
elif [[ "$kl" == -* ]]; then
ops="${ops},${kl}" # Long Options
fi
done
opl="${opl:1}" ; ops="${ops:1}"
이것은 만든다
ops: "-p,-q"
opl: "--plong,--qlong"
짧은 옵션의 경우 패턴으로 구성된 배열을 구성하고 싶습니다.
("-p+([[:print:]])" "-p" "-p=*" "-q+([[:print:]])" "-q" "-q=*")
장기 옵션의 경우
("--plong" "--plong=*" "--qlong" "--qlong=*")
다음 해결 방법을 사용하기 시작했지만 효과가 좋지 않습니다.
echo "$ops" | tr ',' ' ' |
xargs -I{} echo "-{}+([[:print:]])" "{}"
echo "$opl" | tr ',' ' ' |
xargs -I{} echo "{}" "{}=*"
답변1
이 문제를 해결했습니다.
pary=()
for kl in ${ops//,/ }; do
pary+=("$kl+([[:print:]])" "$kl")
done
printf '%s\n' "ary: ${ary[*]}"
qary=()
for kl in ${opl//,/ }; do
qary+=("$kl" "${kl}=*")
done
printf '%s\n' "ary: ${ary[*]}"