nesten van shell variabelen mogelijk?

Pagina: 1
Acties:

  • MrScratch
  • Registratie: December 2001
  • Laatst online: 15:16

MrScratch

I am rubber, you are glue

Topicstarter
Ik wil graag shell variabelen nesten, maar weet niet of dat mogelijk is.

Bijvoorbeeld

export A=4
export B=A

Als ik nu echo $B doe, krijg ik A terug. Maar dat wil ik uitbreiden, door een soort van echo $`echo $B` te doen. Ik verwacht dan dat `echo $B` een A oplevert en dan blijft er effectief dus echo $A staan en dit zou dan weer 4 op moeten leveren. Helaas, deze gedachte is te simpel.

Hoe kan het wel, of is het uberhaupt niet mogelijk?

Look behind you! A three headed monkey!


Verwijderd

Onderstaande zou moeten werken:

eval echo$`echo $B`

$ A=4
$ B=A
$ eval echo $`echo $B`

4

Maar een elegante oplossing is 't niet.....

Deze shell buildin werkt naar mijn weten alleen met sh (bash), csh en ksh.

[ Voor 50% gewijzigd door Verwijderd op 20-08-2003 15:25 ]


  • MrScratch
  • Registratie: December 2001
  • Laatst online: 15:16

MrScratch

I am rubber, you are glue

Topicstarter
Nee klopt, maar doet inderdaad wat ik wil. Zat op zich zelf al dicht in de buurt (staat niet in TS), maar die eval was ik niet op gekomen.

Look behind you! A three headed monkey!


Verwijderd

Dit lijkt ook te werken:
code:
1
2
3
4
$ export A=4
$ export B=A
$ echo $[$B]
4

  • Wilke
  • Registratie: December 2000
  • Laatst online: 21:46
Volgens mij werkt dit ook, en hiermee kun je ook 'complexere' dingen bouwen die B bijvoorbeeld laat afhangen van meer dan 1 andere variabele:

code:
1
2
3
4
5
6
7
$ export A=4
$ export B = $(echo $A)
$ echo $B
4
$ export A=5
$ echo $B
5


Het idee is dat het commando dat tussen de $() staat wordt uitgevoerd telkens wanneer B ergens gebruikt wordt. Dus ja, dat is elke keer, precies wat je wilt.

[ Voor 26% gewijzigd door Wilke op 20-08-2003 16:28 ]


Verwijderd

Wilke schreef op 20 August 2003 @ 16:25:
code:
1
$ export B = $(echo $A)
Dit werkt niet in bash (waar wel?)
B houdt de waarde waarmee je B hebt geinitialiseerd. Het opnieuw uitvragen van de waarde van B, geeft geen nieuwe waarde.

Verwijderd

Je kan ook functies gebruiken:
code:
1
2
3
4
5
6
7
$ show_b(){ echo $A; }
$ export A=4
$ show_b
4
$ export A=5
$ show_b
5

Dit werkt in bash.
Pagina: 1