Case ステートメントの動的パターン文字列

Case ステートメントの動的パターン文字列

次のオプションのリストがあります。

opts="-p,--plong,-q,--qlong"

文字列を2つの異なる文字列に分割しました。 1つは短期オプション用、もう1つは長期オプション用です。

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

おすすめ記事