diff options
Diffstat (limited to 'scripts/library/parse_options.sh')
-rw-r--r-- | scripts/library/parse_options.sh | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/scripts/library/parse_options.sh b/scripts/library/parse_options.sh index d57443b0..039eef92 100644 --- a/scripts/library/parse_options.sh +++ b/scripts/library/parse_options.sh @@ -3,7 +3,7 @@ parse_options() { local short_options=$1; shift; local long_options=$1; shift; local ret=0; - local unused_options=() + local unused_options="" local i while [[ -n $1 ]]; do @@ -23,15 +23,17 @@ parse_options() { [[ ${match} = ${1:2}:: && -n $2 && ${2:0:1} != "-" ]] && needsargument=1 if (( ! needsargument )); then - OPTRET+=("$1") + printf ' %s' "$1" else if [[ -n $2 ]]; then - OPTRET+=("$1" "$2") + printf ' %s ' "$1" shift + printf "'%q" "$1" while [[ -n $2 && ${2:0:1} != "-" ]]; do shift - OPTRET+=("$1") + printf " %q" "$1" done + printf "'" else printf "@SCRIPTNAME@: $(gettext "option %s requires an argument\n")" "'$1'" >&2 ret=1 @@ -55,22 +57,26 @@ parse_options() { ( -n ${1:$i+1} || ( -n $2 && ${2:0:1} != "-" ) ) ]] && needsargument=1 if (( ! needsargument )); then - OPTRET+=("-${1:i:1}") + printf ' -%s' "${1:i:1}" else if [[ -n ${1:$i+1} ]]; then - OPTRET+=("-${1:i:1}" "${1:i+1}") + printf ' -%s ' "${1:i:1}" + printf "'%q" "${1:$i+1}" while [[ -n $2 && ${2:0:1} != "-" ]]; do shift - OPTRET+=("$1") + printf " %q" "$1" done + printf "'" else if [[ -n $2 ]]; then - OPTRET+=("-${1:i:1}" "$2") + printf ' -%s ' "${1:i:1}" shift + printf "'%q" "$1" while [[ -n $2 && ${2:0:1} != "-" ]]; do shift - OPTRET+=("$1") + printf " %q" "$1" done + printf "'" else printf "@SCRIPTNAME@: $(gettext "option %s requires an argument\n")" "'-${1:i:1}'" >&2 @@ -85,11 +91,15 @@ parse_options() { fi done else - unused_options+=("$1") + unused_options="${unused_options} '$1'" fi shift done - OPTRET+=('--' "${unused_options[@]}") + printf " --" + [[ $unused_options ]] && printf ' %s' "${unused_options[@]}" + [[ $1 ]] && printf " '%s'" "$@" + printf "\n" + return $ret } |