[linux] Re: Probleem met locale variabelen in bash

Cecil Westerhof CecilWesterhof op xs4all.nl
Wo Mrt 12 10:27:17 CET 2008


Op wo, 12-03-2008 te 09:04 +0100, schreef Cecil Westerhof:
> > > In bash kun je local gebruiken om te zorgen dat variabelen lokaal zijn
> > > i.p.v. globaal. Er is echter een cavecat: als de lokale variabele al
> > > globaal bestaat en die globale variabele is read-only, dan wordt de
> > > lokale variabele niet aangemaakt en de globale gebruikt.
> > > 
> > > Nu kun je zeggen: gebruik geen lokale en globale variabelen met dezelfde
> > > naam, maar dat is bij het maken van bibliotheken wat lastiger. Is er
> > > iets tegen te doen?
> > 
> > if readonly | grep -q cecil
> > then 
> >     echo "Ik heb een dubbelganger"
> >     exit 2
> > else
> >     local cecil
> >     .....
> > fi
> 
> Dat is een hele aardige. Kan nog wat finetuning gebruiken (bijvoorbeeld
> cecilStr moet geen hit geven), maar ik ga hier zeker wat mee doen.

Ik heb een oplossing.
Ik heb de volgende funktie gedefinieerd:
        function checkReadonlyVariables () {
            readonly | awk -v variableNames=${1} '
              BEGIN {
                returnCode = 0;
                split(variableNames, variableArray, "#");
              }
        
              END {
                exit returnCode
              }
        
              {
                for( i in variableArray) {
                  variableName = variableArray[i];
                  temp = "^" variableName "=";
                  if( match($3, temp ) ) {
                    print "ERROR: " variableName " defined as readonly"
                    returnCode = -1;
                  }
                }
              }
            '
            return $?
        }

Op de plek waar ik nu de lokale variabelen wil definieren gebruik ik de
volgende code:
        checkReadonlyVariables "INTERVAL#HOUR_SWITCH#NORMAL_WORK#DO_EMPTY_LINE"
        if [ $? -ne 0 ]; then
            echo "ERROR: At least one variable was allready defined as readonly"
            exit -1
        fi

-- 
Cecil Westerhof <CecilWesterhof op xs4all.nl>




More information about the Linux mailing list