ENOSIG Discussie (threads)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: bash local


Op 25-05-18 om 20:29 schreef Wim:
> Hoi Joost, Allen,
> 
>>> function localtest()
>>> {
>>> 	local aaaa=$1
>>> 	eval "$2='$aaaa'"
>>> }
>>>
>>> echo Andere variablenaam
>>> localtest 34 result
>>> echo $result
>>>
>>> echo "Variablenaam die ook in de functie (als local) voorkomt"
>>> localtest 34 aaaa
>>> echo $aaaa
>>
>> Dank je, dat maakt t voor mij ietsje duidelijker.

Hoi Wim,
binnen localtest is 'aaaa' een lokale variabele. Wat je ook doet, buiten
die functie is die variabele niet meer zichtbaar. Dat je er later een
andere waarde in stopt verandert daar niks meer aan, die variabele is al
gemarkeerd als local.

>>>>  eval "$3='$cccc'"
>>
>>> Wat is daar eng aan? cccc wordt in $3 gezet waardoor de waarde van cccc
>>> terugkan naar de aanroepende functie. Mogelijk is er een nettere oplossing
>>> maar die heb ik ondanks het nodige onderzoek lange tijd geleden nog niet
>>> gevonden. Dit werkt goed voor allerhande variablen.

eval maakt code over het algemeen erg lastig om te begrijpen en een stuk
minder voorspelbaarder. Veel programmeurs proberen eval-constructies dus
zo veel mogelijk te vermijden.

> Dat zou mooi zijn. Als je, iemand een idee hebt / heeft . . . .

Het is mij niet duidelijk wat je precies probeert te bereiken.
Runtime variabelen aanmaken waarbij de naam zelf variabel is niet echt
gebruikelijk. Is dit het hele doel van de excercitie?

Gaat het je om hoe je variabelen retourneert naar de parent?

mytestfunc() {
  local result = "$1 en $2"
  echo "$result"
}

myresult=$(mytestfunc aaa bbb)


>> en ik vermoed dat dan ook dat
>> local-probleem (misschien is dat wel bug in bash) je niet meer dwars zit.
> 
> Er is gemakkelijk om heen te werken. Het zit me dus niet dwars. Wat wel het gevolg is is dat er opgelet moet worden bij het kiezen van variable namen. Werkt de local functie wel vraag ik mij af.
> Ik liep er tegen aan tijdens het schrijven van een programma en toen heb ik een proof of concept script geschreven. Mogelijk is het inderdaad een bug.
> 
>> Het feit dat aanroepen van
>>
>>  localtest a b
>>
>> een variable met de naam $b creeert is voor mij onverwacht.  Had niet gedacht
>> dat zoiets kon in bash.  Ik ben gewend dat argumenten van functies door
>> functies gelezen worden, en niet gebruikt worden als variabele-namen.
> 
> Zo zie je maar weer :-)

Je breekt door scope-grenzen heen op een manier die onder bash werkt
maar in de meeste andere programmeertalen niet zomaar mogelijk is, of
waar op z'n minst zeer op wordt neergekeken.


Follow-ups:

Gerelateerd:


[ Date Index] [ Thread Index]