短いオプションの代わりにサブコマンドと長いオプションでgetopt
orを使用する方法は?getopts
私は短期と長期のオプションを実装する方法を知っていますgetopts
。これまで私が見つけた解決策は、getopts
サブコマンドにswitch-caseを使用することですが、次の短いオプションを使用することです。
オプション以外のパラメータの後のオプションを解析するには、getoptsを使用してください。
たとえば、次のサブコマンドと長いオプションをどのように実装できますか? :
$> ./myscript.sh help
show
show --all
set
set --restart
reset
reset --restart
help
答え1
関数から手動で解析し、"$@"
呼び出し後の残りの非オプションは背中にあります$1
。$2
この例では、スイッチを維持するために連想配列を使用しています。 bash 3以上がない場合は、グローバル変数を使用できます。
サブコマンドはargs [0]と残りのオプションです。
usage() {
echo "${0##*/} [options...] args ... "
}
version() {
echo "0.1"
}
parse_opt() {
while [[ -n "$1" ]]; do
case "$1" in
--) break ;;
## Your options here:
-m) opts[m]=1 ;;
-c|--center) opts[c]="$2" ; shift ;;
-x) opts[x]=1 ;;
## Common / typical options
-V) version; exit 0 ;;
--version)
version; exit 0 ;;
-?|--help)
usage ; exit 0 ;;
-*)
echo >&2 "$0: Error in usage."
usage
exit 1
;;
*) break ;;
esac
shift
done
args=("$@")
}
declare args
declare -A opts # assoc array
parse_opt "$@"
case "${args[0]}" in
sub1)
"${args[@]}" ;;
*)
echo >&2 "Unknown sub-command"
exit 1
esac