Klein stukje code "ash"

Status
Niet open voor verdere reacties.

Tom VH

Gebruiker
Lid geworden
17 feb 2008
Berichten
56
Hallo, kan iemand mij toevallig uitleggen wat volgende code doet?

Code:
append() {
	local var="$1"
	local value="$2"
	local sep="${3:- }"
	
	eval "export ${NO_EXPORT:+-n} -- \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\""
}

De QoS scripts van openwrt zijn voor mij niet configureerbaar genoeg. Ik zou graag een kleine aanpassing doen maar ik ken niets van bash of ash. Vandaar mijn vraag.

Vooral "${NO_EXPORT:+-n} " en die backslashen erna begrijp ik niet.

Alvast bedankt.

PS: bestaat er iets zodat ik een ash script stap voor stap kan laten uitvoeren. In VBA is dit mogelijk maar in bash ook?
 
Volgens mij is NO_EXPORT een variabele die eerder is gedefineerd met de waarde "1" in de code. Verder maakt export variabelen "globaal beschikbaar" je kunt de uitkomst van deze actie dus zien in je environment.

De backslash "escaped" hier volgens mij gewoon de " en de $. Dit is nodig zodat EVAL het ziet als letterlijke tekst die wordt doorgegeven aan export
 
Hartelijk dank!

Maar wat wil die +-n zeggen na NO_EXPORT. In de manpage van ash vind ik:
${parameter:-word}
${parameter:+word}
maar ik vind nergens
${parameter:+-word}
 
volgens mij is het + "-n" dat wil zeggen als NO_EXPORT niet gedefineerd is wordt export uitgevoerd met de -n parameter, maar ik zou het moeten testen om zeker te weten. ik ben zelf geen grote gebruiker van dit soort scripts
 
Ok bedankt.

Ik heb de source code gisteren nog verder proberen te analyseren maar het is mij te moeilijk. Het is totaal niet gedocumenteerd wat het voor mij te moeilijk maakt om de structuur van het programma te kunnen achterhalen. :( . Ik ga dan zelf maar mijn qos script schrijven waarbij geen configfile gebruikt kan worden.

Toch bedankt
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan