diff options
author | David Vazgenovich Shakaryan <dvshakaryan@gmail.com> | 2023-03-27 01:28:29 -0700 |
---|---|---|
committer | David Vazgenovich Shakaryan <dvshakaryan@gmail.com> | 2023-03-27 01:28:29 -0700 |
commit | 670b632fd51bfbf4a003daefa4260e9c799c9ff8 (patch) | |
tree | bf4ec03d65ced78c61dba6ba85d320a8dfe1a9be | |
parent | 7d120b7939aa5bae68dbb5fc2f877cc8220c6929 (diff) | |
download | backomp-670b632fd51bfbf4a003daefa4260e9c799c9ff8.tar.gz backomp-670b632fd51bfbf4a003daefa4260e9c799c9ff8.tar.xz |
add `$opt=-' syntax for setting a config opt to an empty value
`$opt=' was already being used for resetting an opt to its default
value.
-rwxr-xr-x | backomp | 19 |
1 files changed, 13 insertions, 6 deletions
@@ -6,8 +6,8 @@ set -e function flr(n, s) { return int(n / s) * s } BEGIN { - split("h d w m", arr) - for (i = 1; i <= length(arr); ++i) { + len = split("h d w m", arr) + for (i = 1; i <= len; ++i) { b = arr[i] if (!match(retain, "([*0-9]+)" b, md)) @@ -64,8 +64,8 @@ run() { backup() { dest_dir="${1}" src_path="${2}" - retain="${3:-"*h*d*w*m"}" - replace="${4:-"h"}" + retain="${3}" + replace="${4}" [[ "$((dcount++))" -ne 0 ]] && echo echo "[${dcount}] [${retain}] ${src_path} => ${dest_dir}" @@ -96,15 +96,22 @@ backup() { printf 'kept %s\n' "${keep[@]}" } +declare -A def_opts=( + ['retain']='*h*d*w*m' + ['replace']='h' +) declare -A opts + while IFS='=' read -r f1 f2; do [[ -z "${f1}" ]] && continue if [[ "${f1}" =~ ^\[(.*)]$ ]]; then base_path="${BASH_REMATCH[1]}" - opts=() + opts="$(declare -p def_opts | sed '1s/[^=]*=//')" elif [[ "${f1}" == '$'* ]]; then - opts["${f1:1}"]="${f2}" + opt="${f1:1}" + [[ "${f2}" == '-' ]] && opts["${opt}"]= || + opts["${opt}"]="${f2:-"${def_opts["${opt}"]}"}" else backup "${base_path}/${f1}" "${f2}" \ "${opts['retain']}" "${opts['replace']}" |