我有以下选项列表
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[*]}"