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.

Mein Ansatz hat sicher auch noch Schwächen, löst aber die beiden
Probleme. Mal sehen, wann ich auf andere Probleme stoße.

#!/bin/bash

OPTVAR="REST"

while [ $# -gt 0 ]; do
    if [ "$1" == "${1#-*}" ]; then
        echo "Param: $1 >> ${OPTVAR}"
        if [ -n "${!OPTVAR}" ]; then
            eval "${OPTVAR}=${!OPTVAR}\ $1"
        else
            eval ${OPTVAR}="$1"
        fi
        shift
    else
        echo "option: $1"
        case "$1" in
            -a)
                OPTVAR="A"
                ;;
            -b)
                OPTVAR="B"
                ;;
            -c)
                C="TRUE"
                OPTVAR="REST"
                ;;
            -? | --help)
                echo "HELP"
                exit
                ;;
        esac
        shift
    fi
done

for OPTVAR in A B REST; do
    echo "${OPTVAR}: ${!OPTVAR}"
done


Rico

Attachment: smime.p7s
Description: S/MIME Kryptografische Unterschrift

_______________________________________________
Lug-dd maillist  -  [email protected]
https://ssl.schlittermann.de/mailman/listinfo/lug-dd

Antwort per Email an