Toon posts:

[Bash] parameter substitution gaat fout?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goedendag allen te samen,

ik ben bezig met het maken van een navigatiebar voor een schoolopdracht, maar nu loop ik vast op het volgende punt:
Ik lees doormiddel van onderstaande SQL een commando uit de database
code:
1
modcommand=$(db_query "select modCommand from tblModules where modName='${1}' limit 1")

Dit commando staat als volgt in de database.
code:
1
update tblModules set modCommand="echo <a href='?module=forums&courseid=${WWW_courseid}'>Forums</a>" where modId=4;

Probeer ik 'm echter te runnen door:
code:
1
echo "$(whereami "${modparent}") &gt; $($modcommand)"

Dan geeftie hetvolgende uit:
code:
1
<a href='/?'>Blackbird</a> &gt; <a href='?module=forums&courseid=${WWW_courseid}'>Forums</a> &gt; forumnaam

Heeft iemand een idee hoe in die ${WWW_courseid} vervangen krijg zoals 't hoort?

  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Volgens mij kan dat met 'eval':
code:
1
2
3
4
5
6
7
8
9
10
#!/bin/bash

A=test
B='$A'

eval C=$B

echo $A
echo $B
echo $C

geeft:
code:
1
2
3
4
$ ./testje
test
$A
test

"He took a duck in the face at two hundred and fifty knots."


Verwijderd

Topicstarter
da's niet echt handig, dan moek nog weten welke variabelen er vervangen moeten worden...

  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Misschien begrijp ik je dan verkeerd, ik heb geen verstand van SQL etc.

Wat ik denk:
Je krijgt een stuk tekst uit de database, in die tekst staat "bla $(WWW_courseid} bla"
En nu wil je dat ${WWW_courseid} wordt vervangen door de waarde van de variabele WWW_courseid in je shell script. Dat kan met 'eval'. Wil je dat niet, dan moet je het misschien anders (meer idiot-proof ;)) uitleggen.

"He took a duck in the face at two hundred and fifty knots."


Verwijderd

Topicstarter
dat klopt, maar die $WWW_courseid is niet de enige var die vervangen moet worden. Zo is er $WWW_topicid, $WWW_forumid en nog veel meer. Mijn probleem is dat deze niet worden vervangen in de result van de query als ik dat probeer uit te voeren als commando.

Of begrijp ik het niet goed?

[ Voor 6% gewijzigd door Verwijderd op 15-10-2003 15:25 ]


  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Volgens mij moet je dan toch 'eval' gebruiken:

bestand db_query (dit geeft als output, dat wat jij uit de db haalt):
code:
1
2
3
#!/bin/bash

echo "echo <a href='?module=forums&courseid=\${WWW_courseid}'>Forums</a>"


bestand testje:
code:
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash

WWW_courseid=30

# hier halen we de info uit de db:
modcommand=$(./db_query)

# hier wordt ${WWW_courseid} vervangen door
# de waarde van deze variabele (30)
eval modcommand="\"$modcommand\""

echo $($modcommand)


Dan geeft testje als output:
code:
1
2
3
$ ./testje
<a href='?module=forums&courseid=30'>Forums</a>
$


Met dus de variabele WWW_courseid vervangen.

[ Voor 14% gewijzigd door _Squatt_ op 15-10-2003 16:01 . Reden: tijdelijke variabele is niet nodig. ]

"He took a duck in the face at two hundred and fifty knots."


Verwijderd

Topicstarter
U heerscht! _/-\o_ _/-\o_ _/-\o_
Pagina: 1