Rico Koerner <r...@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: $@"
------

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Lug-dd maillist  -  Lug-dd@mailman.schlittermann.de
https://ssl.schlittermann.de/mailman/listinfo/lug-dd

Antwort per Email an