Toon posts:

(BA)SH Variable(n) Syntax probleem-, vraagje.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik export onder een variabele ifx de naam van de interface die ik wil gebruiken in daarop volgende code (nb: iptables script). Maar, aan die interface, c.q. ifx waarde, zitten weer enkele 'persoonlijke' waardes vast, die ik een variabele-naam wil geven van de waarde van $ifx plus een stukje herkenningscode zoals b.v. _address. Zie voorbeeldcode:





exporteren waarde ifx:


export ifx=eth0


interface gebonden waarde


export ${ifx}_address=192.68.0.1





Tot aan hier werkt het prima, nu bestaat er dus een variabele genaamd $ifx met waarde eth0 en $eth0_address met een waarde van 192.168.0.1.


Maar, als ik nu verderop in de code de waarde bij de waarde van ifx met _address erachter wil ophalen gaat het mis. Ik doe het als volgt:





$[${ifx}_address]





dit werkt alleen al is de waarde van ${ifx}_address (dus $eth0_address in dit geval) numeriek. Het werkt dus niet bij niet numerieke characters.


bewijs:





werking zoals ik het wil


export ifx=eth0


export ${ifx}_address=12345


echo $[${ifx}_address]


> 12345





werkt niet bij niet numeriek, geeft gewoon 0 als echo


export ifx=eth0


export ${ifx}_address=niet-numerieke-waarde


echo $[${ifx}_address]


> 0





Al heeft iemand een oplossing om dit idee tot stand te brengen met niet numerieke waardes, desnoods andere aanpak, dan hoor ik het graag.

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
code:
1
2
3
4
5
$ export ifx=eth0
$ export `echo $ifx`_address=niet-numeriek
$ echo $eth0_address
niet-numeriek
$

dat werkt wel als het goed is : )
En let er op dat om de echo $ifx backquotes (`) staan, en geen aanhalingstekens ('), maar als je vaker bash gezien hebt, had je dat vast al wel begrepen : )

Verwijderd

Topicstarter
Ik vind je reply aardig, maar in je voorbeeld roep je alsnog de waarde op als "$eth0_address" en dat wil ik dus niet.

mijn doel is:

stap 1) export ifx=vmnet1 (lijkt me duidelijk)
stap 2) export ${ifx}_address=192.168.0.1/32 (dit maakt een variabele genaamd vmnet1_address met waarde 192...)

stap 3) oproepen waarde $vmnet1_address, zonder het dus $vmnet1_address te noemen. Op de een of andere manier de waarde van $ifx oproepen, '_address' eraan plakken en de waarde daarvan ophalen.
Op woensdag 01 mei 2002 20:52 schreef blaataaps het volgende:



code:
1
2
3
4
5
6
7
8
9
$ export ifx=eth0

$ export `echo $ifx`_address=niet-numeriek

$ echo $eth0_address

niet-numeriek

$



dat werkt wel als het goed is : )

En let er op dat om de echo $ifx backquotes (`) staan, en geen aanhalingstekens ('), maar als je vaker bash gezien hebt, had je dat vast al wel begrepen : )

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Op woensdag 01 mei 2002 21:10 schreef 3bird het volgende:
Ik vind je reply aardig, maar in je voorbeeld roep je alsnog de waarde op als "$eth0_address" en dat wil ik dus niet.
dankje, graag gedaan : )
stap 3) oproepen waarde $vmnet1_address, zonder het dus $vmnet1_address te noemen. Op de een of andere manier de waarde van $ifx oproepen, '_address' eraan plakken en de waarde daarvan ophalen.
[..]
Dan heb ik je idd een beetje verkeerd begrepen : )
Hmm, op het eerste gezicht zou
code:
1
echo $`echo $ifx`_address

Maar hij weigert om het geheelt te expanden naar de naam van een string. Ik heb wat dingen geprobeerd, maar het lijkt erop dat bash geen "variabele variabele-namen" lust.

Verwijderd

Topicstarter
indirect dus wel :) --->

xport ifx=vmnet1
export ip=${ifx}_address
typeset ${ip}=192.168.0.1/32
echo ${!ip}
> 192.168.0.1/32
Op woensdag 01 mei 2002 21:42 schreef blaataaps het volgende:



[..]



dankje, graag gedaan : )

[..]



Dan heb ik je idd een beetje verkeerd begrepen : )

Hmm, op het eerste gezicht zou

code:
1
echo $`echo $ifx`_address



Maar hij weigert om het geheelt te expanden naar de naam van een string. Ik heb wat dingen geprobeerd, maar het lijkt erop dat bash geen "variabele variabele-namen" lust.

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 16-08 16:08

deadinspace

The what goes where now?

Op woensdag 01 mei 2002 20:52 schreef blaataaps het volgende:
En let er op dat om de echo $ifx backquotes (`) staan, en geen aanhalingstekens ('), maar als je vaker bash gezien hebt, had je dat vast al wel begrepen : )
Daarom is het altijd leesbaarder om $() te gebruiken ipv ``.

Verwijderd

eval echo "\$${ifx}_address"
Pagina: 1