最終更新 1 month ago

gistfile1.txt Raw
1#!/usr/bin/env bash
2
3# ============================================
4# Flag Registry
5# ============================================
6
7declare -A _REGISTERED_FLAGS=()
8
9# ============================================
10# Registration
11# ============================================
12
13function flag::register() {
14 local flag="$1"
15 _REGISTERED_FLAGS["$flag"]=1
16}
17
18function flag::registered() {
19 [[ -n "${_REGISTERED_FLAGS["$1"]:-}" ]]
20}
21
22# ============================================
23# Parsing
24# ============================================
25
26# Parse flags from args into associative array
27# Usage: flag::parse "$@"
28# Access: flag::get --name
29declare -A _FLAG_VALUES=()
30
31function flag::parse() {
32 _FLAG_VALUES=()
33
34 while [[ $# -gt 0 ]]; do
35 case "$1" in
36 --*)
37 local key="$1"
38 # Boolean flag (no value follows, or next arg is another flag)
39 if [[ $# -eq 1 || "$2" == --* ]]; then
40 _FLAG_VALUES["$key"]="true"
41 shift
42 else
43 _FLAG_VALUES["$key"]="$2"
44 shift 2
45 fi
46 ;;
47 *)
48 shift
49 ;;
50 esac
51 done
52}
53
54function flag::get() {
55 echo "${_FLAG_VALUES["$1"]:-}"
56}
57
58function flag::enabled() {
59 [[ "${_FLAG_VALUES["$1"]:-}" == "true" ]]
60}
61
62function flag::set() {
63 local key="$1"
64 local value="$2"
65 _FLAG_VALUES["$key"]="$value"
66}
67