Fixed the stupid cmdarg_* prefixing of hash and array arguments, just use the key
This commit is contained in:
17
cmdarg.sh
17
cmdarg.sh
@@ -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")
|
||||||
|
|||||||
8
test.sh
8
test.sh
@@ -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 "$@"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user