diff options
author | Allan McRae <allan@archlinux.org> | 2011-07-05 20:14:20 +1000 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2011-07-05 10:22:31 -0500 |
commit | bfd6d22be20d939dfd77a75f21c790b55548ab4a (patch) | |
tree | c63072e5b125e6158e84b844e8e9722436acb606 | |
parent | 87ee38d8b3d155310d13e2539e8647a98115df80 (diff) |
parse_options: accept multiple arguments
Allow command-line options to accept multiple arguments without
additional quoting by taking the list of arguments until one
starting with a "-" is reached.
The only current use of this is the --pkg option in makepkg. This
allows (e.g.)
makepkg --pkg foo bar
and packages "foo" and "bar" will be built.
Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r-- | scripts/library/parse_options.sh | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/scripts/library/parse_options.sh b/scripts/library/parse_options.sh index 49cbb60f..48fd42cd 100644 --- a/scripts/library/parse_options.sh +++ b/scripts/library/parse_options.sh @@ -20,15 +20,20 @@ parse_options() { local needsargument=0 [[ ${match} = ${1:2}: ]] && needsargument=1 - [[ ${match} = ${1:2}:: && -n $2 && ${2:0:1} != "-" ]] && needsargument=1 + [[ ${match} = ${1:2}:: && -n $2 && ${2:0:1} != "-" ]] && needsargument=1 if (( ! needsargument )); then printf ' %s' "$1" else if [[ -n $2 ]]; then - printf ' %s' "$1" + printf ' %s ' "$1" shift - printf " '%s'" "$1" + printf "'%q" "$1" + while [[ -n $2 && ${2:0:1} != "-" ]]; do + shift + printf " %q" "$1" + done + printf "'" else printf "@SCRIPTNAME@: $(gettext "option %s requires an argument\n")" "'$1'" >&2 ret=1 @@ -55,13 +60,24 @@ parse_options() { printf ' -%s' "${1:i:1}" else if [[ -n ${1:$i+1} ]]; then - printf ' -%s' "${1:i:1}" - printf " '%s'" "${1:$i+1}" + printf ' -%s ' "${1:i:1}" + printf "'%q" "${1:$i+1}" + while [[ -n $2 && ${2:0:1} != "-" ]]; do + shift + printf " %q" "$1" + done + printf "'" else if [[ -n $2 ]]; then - printf ' -%s' "${1:i:1}" + printf ' -%s ' "${1:i:1}" shift - printf " '%s'" "${1}" + printf "'%q" "$1" + while [[ -n $2 && ${2:0:1} != "-" ]]; do + shift + printf " %q" "$1" + done + printf "'" + else printf "@SCRIPTNAME@: $(gettext "option %s requires an argument\n")" "'-${1:i:1}'" >&2 ret=1 |