Fixed the stupid cmdarg_* prefixing of hash and array arguments, just use the key

This commit is contained in:
2013-10-09 13:38:06 -04:00
parent 308e38279f
commit 034e79e9bf
2 changed files with 12 additions and 13 deletions

View File

@@ -36,7 +36,6 @@ function cmdarg
exit 1 exit 1
fi fi
if [[ "$(type -t cmdarg_$key)" != "" ]] || \ if [[ "$(type -t cmdarg_$key)" != "" ]] || \
[[ "$(eval 'echo ${cmdarg_${key}}' 2>/dev/null)" != "" ]] || \
[[ "${CMDARG_TYPES[$key]}" != "" ]]; then [[ "${CMDARG_TYPES[$key]}" != "" ]]; then
echo "command line key '$key' is reserved by cmdarg or defined twice" >&2 echo "command line key '$key' is reserved by cmdarg or defined twice" >&2
exit 1 exit 1
@@ -45,14 +44,14 @@ function cmdarg
if [[ "${1:1:1}" == ":" ]]; then if [[ "${1:1:1}" == ":" ]]; then
CMDARG_FLAGS[$shortopt]=$CMDARG_FLAG_WITHARG CMDARG_FLAGS[$shortopt]=$CMDARG_FLAG_WITHARG
if [[ "${1:2:4}" == "[]" ]]; then if [[ "${1:2:4}" == "[]" ]]; then
declare -p cmdarg_${key} >/dev/null 2>&1 declare -p ${key} >/dev/null 2>&1
if [[ $? -ne 0 ]]; then if [[ $? -ne 0 ]]; then
echo 'Array variable cmdarg_'"${key}"' does not exist. Array variables MUST be declared by the user!' >&2 echo 'Array variable cmdarg_'"${key}"' does not exist. Array variables MUST be declared by the user!' >&2
exit 1 exit 1
fi fi
CMDARG_TYPES[$key]=$CMDARG_TYPE_ARRAY CMDARG_TYPES[$key]=$CMDARG_TYPE_ARRAY
elif [[ "${1:2:4}" == "{}" ]]; then elif [[ "${1:2:4}" == "{}" ]]; then
declare -p cmdarg_${key} >/dev/null 2>&1 declare -p ${key} >/dev/null 2>&1
if [[ $? -ne 0 ]]; then if [[ $? -ne 0 ]]; then
echo 'Hash variable cmdarg_'"${key}"' does not exist. Hash variables MUST be declared by the user!' >&2 echo 'Hash variable cmdarg_'"${key}"' does not exist. Hash variables MUST be declared by the user!' >&2
exit 1 exit 1
@@ -167,13 +166,13 @@ function cmdarg_set_opt
cmdarg_cfg[$key]=true cmdarg_cfg[$key]=true
;; ;;
$CMDARG_TYPE_ARRAY) $CMDARG_TYPE_ARRAY)
arrname="cmdarg_${key}" arrname="${key}"
str='${#'"$arrname"'[@]}' str='${#'"$arrname"'[@]}'
prevlen=$(eval "echo $str") prevlen=$(eval "echo $str")
eval "${arrname}[$((prevlen + 1))]=\"$arg\"" eval "${arrname}[$((prevlen + 1))]=\"$arg\""
;; ;;
$CMDARG_TYPE_HASH) $CMDARG_TYPE_HASH)
arrname="cmdarg_${key}" arrname="${key}"
# Want to know WTF I named this variable like this? # Want to know WTF I named this variable like this?
# http://stackoverflow.com/questions/10258686/bash-associative-array-error # http://stackoverflow.com/questions/10258686/bash-associative-array-error
# ... Apparently there is a bug in bash. # ... Apparently there is a bug in bash.
@@ -203,13 +202,13 @@ function cmdarg_check_empty
$CMDARG_TYPE_BOOLEAN) $CMDARG_TYPE_BOOLEAN)
echo ${cmdarg_cfg[$longopt]} echo ${cmdarg_cfg[$longopt]}
;; ;;
$CMDARG_TYPE_ARRAY) $CMDARG_TYPE_ARRAY)
arrname="cmdarg_${longopt}" arrname="${longopt}"
lval='${!'"${arrname}"'[@]}' lval='${!'"${arrname}"'[@]}'
eval "echo $lval" eval "echo $lval"
;; ;;
$CMDARG_TYPE_HASH) $CMDARG_TYPE_HASH)
arrname="cmdarg_${longopt}" arrname="${longopt}"
lval='${!'"${arrname}"'[@]}' lval='${!'"${arrname}"'[@]}'
eval "echo $lval" eval "echo $lval"
;; ;;
@@ -302,7 +301,7 @@ function cmdarg_dump
do do
repr="${key}:${CMDARG_TYPES[$key]}" repr="${key}:${CMDARG_TYPES[$key]}"
if [[ ${CMDARG_TYPES[$key]} == $CMDARG_TYPE_ARRAY ]] || [[ ${CMDARG_TYPES[$key]} == $CMDARG_TYPE_HASH ]] ; then if [[ ${CMDARG_TYPES[$key]} == $CMDARG_TYPE_ARRAY ]] || [[ ${CMDARG_TYPES[$key]} == $CMDARG_TYPE_HASH ]] ; then
arrname="cmdarg_${key}" arrname="${key}"
echo "${repr} => " echo "${repr} => "
keys='${!'"$arrname"'[@]}' keys='${!'"$arrname"'[@]}'
for idx in $(eval "echo $keys") for idx in $(eval "echo $keys")

View File

@@ -1,14 +1,14 @@
#!/usr/bin/bash4 #!/usr/bin/bash4
declare -a cmdarg_array declare -a cfg_array
declare -A cmdarg_hash declare -A cfg_hash
source ./cmdarg.sh source ./cmdarg.sh
cmdarg 'b' 'boolean' 'A boolean argument' cmdarg 'b' 'boolean' 'A boolean argument'
cmdarg 's:' 'string' 'A string argument' cmdarg 's:' 'string' 'A string argument'
cmdarg 'a:[]' 'array' 'An array argument' cmdarg 'a:[]' 'cfg_array' 'An array argument'
cmdarg 'H:{}' 'hash' 'A hash argument' cmdarg 'H:{}' 'cfg_hash' 'A hash argument'
cmdarg_parse "$@" cmdarg_parse "$@"