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

相关内容