[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