aboutsummaryrefslogtreecommitdiff
path: root/shflags
diff options
context:
space:
mode:
Diffstat (limited to 'shflags')
-rw-r--r--shflags70
1 files changed, 36 insertions, 34 deletions
diff --git a/shflags b/shflags
index b6a117a..91b84b3 100644
--- a/shflags
+++ b/shflags
@@ -81,6 +81,11 @@
#
# Notes:
# - lists of strings are space separated, and a null value is the '~' char.
+#
+# $() are not fully portable (POSIX != portable).
+# shellcheck disable=SC2006
+# [ p -a q ] are well defined enough (vs [ p ] && [ q ]).
+# shellcheck disable=SC2166
# Return if FLAGS already loaded.
[ -n "${FLAGS_VERSION:-}" ] && return 0
@@ -149,7 +154,6 @@ __FLAGS_RESERVED_LIST="${__FLAGS_RESERVED_LIST} VERSION "
# getopt version.
__FLAGS_GETOPT_VERS_STD=0
__FLAGS_GETOPT_VERS_ENH=1
-__FLAGS_GETOPT_VERS_BSD=2
${FLAGS_GETOPT_CMD} >/dev/null 2>&1
case $? in
@@ -199,12 +203,12 @@ for __flags_const in ${__flags_constants}; do
esac
# Set flag readonly.
if [ -z "${ZSH_VERSION:-}" ]; then
- readonly ${__flags_const}
+ readonly "${__flags_const}"
continue
fi
case ${ZSH_VERSION} in
- [123].*) readonly ${__flags_const} ;;
- *) readonly -g ${__flags_const} ;; # Declare readonly constants globally.
+ [123].*) readonly "${__flags_const}" ;;
+ *) readonly -g "${__flags_const}" ;; # Declare readonly constants globally.
esac
done
unset __flags_const __flags_constants
@@ -230,23 +234,23 @@ __flags_opts='' # Temporary storage for parsed getopt flags.
# Logging functions.
_flags_debug() {
[ ${__flags_level} -le ${FLAGS_LEVEL_DEBUG} ] || return
- echo "flags:DEBUG $@" >&2
+ echo "flags:DEBUG $*" >&2
}
_flags_info() {
[ ${__flags_level} -le ${FLAGS_LEVEL_INFO} ] || return
- echo "flags:INFO $@" >&2
+ echo "flags:INFO $*" >&2
}
_flags_warn() {
[ ${__flags_level} -le ${FLAGS_LEVEL_WARN} ] || return
- echo "flags:WARN $@" >&2
+ echo "flags:WARN $*" >&2
}
_flags_error() {
[ ${__flags_level} -le ${FLAGS_LEVEL_ERROR} ] || return
- echo "flags:ERROR $@" >&2
+ echo "flags:ERROR $*" >&2
}
_flags_fatal() {
[ ${__flags_level} -le ${FLAGS_LEVEL_FATAL} ] || return
- echo "flags:FATAL $@" >&2
+ echo "flags:FATAL $*" >&2
exit ${FLAGS_ERROR}
}
@@ -262,8 +266,8 @@ flags_loggingLevel() { echo ${__flags_level}; }
flags_setLoggingLevel() {
[ $# -ne 1 ] && _flags_fatal "flags_setLevel(): logging level missing"
_flags_level_=$1
- [ ${_flags_level_} -ge ${FLAGS_LEVEL_DEBUG} \
- -a ${_flags_level_} -le ${FLAGS_LEVEL_FATAL} ] \
+ [ "${_flags_level_}" -ge "${FLAGS_LEVEL_DEBUG}" \
+ -a "${_flags_level_}" -le "${FLAGS_LEVEL_FATAL}" ] \
|| _flags_fatal "Invalid logging level '${_flags_level_}' specified."
__flags_level=$1
unset _flags_level_
@@ -307,10 +311,10 @@ _flags_define()
"short:${_flags_short_}"
_flags_return_=${FLAGS_TRUE}
- _flags_usName_=`_flags_underscoreName ${_flags_name_}`
+ _flags_usName_="`_flags_underscoreName "${_flags_name_}"`"
# check whether the flag name is reserved
- _flags_itemInList ${_flags_usName_} "${__FLAGS_RESERVED_LIST}"
+ _flags_itemInList "${_flags_usName_}" "${__FLAGS_RESERVED_LIST}"
if [ $? -eq ${FLAGS_TRUE} ]; then
flags_error="flag name (${_flags_name_}) is reserved"
_flags_return_=${FLAGS_ERROR}
@@ -327,7 +331,7 @@ _flags_define()
# check for existing long name definition
if [ ${_flags_return_} -eq ${FLAGS_TRUE} ]; then
- if _flags_itemInList ${_flags_usName_} ${__flags_definedNames}; then
+ if _flags_itemInList "${_flags_usName_}" "${__flags_definedNames}"; then
flags_error="definition for ([no]${_flags_name_}) already exists"
_flags_warn "${flags_error}"
_flags_return_=${FLAGS_FALSE}
@@ -338,7 +342,7 @@ _flags_define()
if [ ${_flags_return_} -eq ${FLAGS_TRUE} \
-a "${_flags_short_}" != "${__FLAGS_NULL}" ]
then
- if _flags_itemInList "${_flags_short_}" ${__flags_shortNames}; then
+ if _flags_itemInList "${_flags_short_}" "${__flags_shortNames}"; then
flags_error="flag short name (${_flags_short_}) already defined"
_flags_warn "${flags_error}"
_flags_return_=${FLAGS_FALSE}
@@ -401,12 +405,12 @@ _flags_define()
# append flag names to name lists
__flags_shortNames="${__flags_shortNames}${_flags_short_} "
__flags_longNames="${__flags_longNames}${_flags_name_} "
- [ ${_flags_type_} -eq ${__FLAGS_TYPE_BOOLEAN} ] && \
+ [ "${_flags_type_}" -eq "${__FLAGS_TYPE_BOOLEAN}" ] && \
__flags_boolNames="${__flags_boolNames}no${_flags_name_} "
# append flag names to defined names for later validation checks
__flags_definedNames="${__flags_definedNames}${_flags_usName_} "
- [ ${_flags_type_} -eq ${__FLAGS_TYPE_BOOLEAN} ] && \
+ [ "${_flags_type_}" -eq "${__FLAGS_TYPE_BOOLEAN}" ] && \
__flags_definedNames="${__flags_definedNames}no${_flags_usName_} "
fi
@@ -425,7 +429,7 @@ _flags_define()
# string: underscored name
_flags_underscoreName()
{
- echo $1 |tr '-' '_'
+ echo "$1" |tr '-' '_'
}
# Return valid getopt options using currently defined list of long options.
@@ -446,17 +450,17 @@ _flags_genOptStr()
_flags_opts_=''
for _flags_name_ in ${__flags_longNames}; do
- _flags_usName_=`_flags_underscoreName ${_flags_name_}`
- _flags_type_=`_flags_getFlagInfo ${_flags_usName_} ${__FLAGS_INFO_TYPE}`
+ _flags_usName_="`_flags_underscoreName "${_flags_name_}"`"
+ _flags_type_="`_flags_getFlagInfo "${_flags_usName_}" "${__FLAGS_INFO_TYPE}"`"
[ $? -eq ${FLAGS_TRUE} ] || _flags_fatal 'call to _flags_type_ failed'
case ${_flags_optStrType_} in
${__FLAGS_OPTSTR_SHORT})
- _flags_shortName_=`_flags_getFlagInfo \
- ${_flags_usName_} ${__FLAGS_INFO_SHORT}`
+ _flags_shortName_="`_flags_getFlagInfo \
+ "${_flags_usName_}" "${__FLAGS_INFO_SHORT}"`"
if [ "${_flags_shortName_}" != "${__FLAGS_NULL}" ]; then
_flags_opts_="${_flags_opts_}${_flags_shortName_}"
# getopt needs a trailing ':' to indicate a required argument
- [ ${_flags_type_} -ne ${__FLAGS_TYPE_BOOLEAN} ] && \
+ [ "${_flags_type_}" -ne "${__FLAGS_TYPE_BOOLEAN}" ] && \
_flags_opts_="${_flags_opts_}:"
fi
;;
@@ -464,7 +468,7 @@ _flags_genOptStr()
${__FLAGS_OPTSTR_LONG})
_flags_opts_="${_flags_opts_:+${_flags_opts_},}${_flags_name_}"
# getopt needs a trailing ':' to indicate a required argument
- [ ${_flags_type_} -ne ${__FLAGS_TYPE_BOOLEAN} ] && \
+ [ "${_flags_type_}" -ne "${__FLAGS_TYPE_BOOLEAN}" ] && \
_flags_opts_="${_flags_opts_}:"
;;
esac
@@ -485,9 +489,8 @@ _flags_genOptStr()
# string: value of dereferenced flag variable
# Returns:
# integer: one of FLAGS_{TRUE|FALSE|ERROR}
-_flags_getFlagInfo()
-{
- # note: adding gFI to variable names to prevent naming conflicts with calling
+_flags_getFlagInfo() {
+ # Note: adding gFI to variable names to prevent naming conflicts with calling
# functions
_flags_gFI_usName_=$1
_flags_gFI_info_=$2
@@ -504,9 +507,9 @@ _flags_getFlagInfo()
-a "${_flags_infoValue_}" = 'ยง' ] && _flags_infoValue_=''
flags_return=${FLAGS_TRUE}
else
- # see if the _flags_gFI_usName_ variable is a string as strings can be
+ # See if the _flags_gFI_usName_ variable is a string as strings can be
# empty...
- # note: the DRY principle would say to have this function call itself for
+ # Note: the DRY principle would say to have this function call itself for
# the next three lines, but doing so results in an infinite loop as an
# invalid _flags_name_ will also not have the associated _type variable.
# Because it doesn't (it will evaluate to an empty string) the logic will
@@ -1001,13 +1004,12 @@ DEFINE_string() { _flags_define ${__FLAGS_TYPE_STRING} "$@"; }
# unnamed: list: command-line flags to parse
# Returns:
# integer: success of operation, or error
-FLAGS()
-{
- # define a standard 'help' flag if one isn't already defined
+FLAGS() {
+ # Define a standard 'help' flag if one isn't already defined.
[ -z "${__flags_help_type:-}" ] && \
DEFINE_boolean 'help' false 'show this help' 'h'
- # parse options
+ # Parse options.
if [ $# -gt 0 ]; then
if [ ${__FLAGS_GETOPT_VERS} -ne ${__FLAGS_GETOPT_VERS_ENH} ]; then
_flags_getoptStandard "$@"
@@ -1016,7 +1018,7 @@ FLAGS()
fi
flags_return=$?
else
- # nothing passed; won't bother running getopt
+ # Nothing passed; won't bother running getopt.
__flags_opts='--'
flags_return=${FLAGS_TRUE}
fi