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