Rico Koerner rico@netbreaker.de (Mo 16 Jan 2012 17:31:00 CET):
Am 15.01.2012 21:10, schrieb Heiko Schlittermann:
Vielleicht so:
#! /bin/bash
A="$1"; shift B="$1"; shift C="$1"; shift
for VARNAME in A B C; do declare ${!VARNAME}="$value" done
Soweit wollte ich nicht gehen, daß die übergebenen Parameter zu Variablennamen werden, ist aber auch interessant.
Ich war auf der Suche nach einer besseren Lösung für getopts, da dort (zumindest aus meiner Sicht) ein paar Fehler drin stecken.
while getopts a:b:c option ...
getopts.sh -a Max Muster -b Musterstadt Hier wird Muster verschluckt, was noch halbwegs verständlich ist.
getopts.sh -a -b Musterstadt Hier wird '-b' als Parameter von -a verstanden und -b existiert dann nicht mehr als Option. Das finde ich nicht mehr ganz so sinnvoll.
Es ist das dokumentierte Verhalten von getopts. Woher soll es wissen, daß „-b“ nicht der erwartete Parameter zu „-a“ ist?
Ein anderes Verhalten legt getopt(1) an den Tag.
./x -a -b hallo ./x -a knix -b knax ./x -aknix -b knax
---- #! /bin/bash
# parameter to -a is optional, -b and -c require a parameter tmp=$(getopt --name $0 --options a::b:c: -- "$@") || exit eval set -- "$tmp"
while :; do opt="$1"; shift case "$opt" in -a) echo "option a: <$1>";; -b) echo "option b: <$1>";; --) break;; esac done
echo "rest: $@" ------