Case 문의 동적 패턴 문자열

Case 문의 동적 패턴 문자열

다음과 같은 옵션 목록이 있습니다.

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[*]}"

관련 정보