shell script var expanderen

Pagina: 1
Acties:

  • edm
  • Registratie: December 2000
  • Laatst online: 13-10-2024
Wat ik graag wil kan ik het beste aan de hand
van dit simpele voorbeeld uitleggen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
!/bin/sh
VAR1="a1 a2 a3"
a1="1 2 3"
a2="4 5 6"
a3="10 9 8"


for X in $VAR1; do
    for Y in $X; do
    v = ${$Y}
    echo $Y $v
    done
done

Nu wil ik graag met v de waardes van A1,A2,A3 kunnen doorlopen. Ik wil dus een variabele
samenstellen uit een variabele.
De voorgaande constructie werkt echter niet,
$$Y werkt ook niet want dan krijg je het process nummer gevolgd door Y, maar hoe dan wel???

Verwijderd

for Y in $X...
Alle interne variabelen heten ${iets}, dus v = ${Y}

Of snap ik het niet? :?

edit:
$VAR1 = ${VAR1} en $X/$Y = ${Y}/${X}, lijkt me

  • edm
  • Registratie: December 2000
  • Laatst online: 13-10-2024
Als ik in het bovenstaande script ${$Y} vervang door jouw voorstel v = ${Y}, krijg
ik 'v: command not found' fout meldingen
en niet de getallen die ik graag zou willen
zien

  • edm
  • Registratie: December 2000
  • Laatst online: 13-10-2024
Voor alle duidelijkheid ik zou graag als
resultaat willen zien
a1 1
a1 2
a1 3
a2 4
a2 5
a2 6
a3 10
a3 9
a3 8

Verwijderd

Dan doe je dus
code:
1
2
3
4
5
for X in ${VAR1}; do
    for Y in ${X}; do
    echo ${X} ${Y}
    done
done

  • edm
  • Registratie: December 2000
  • Laatst online: 13-10-2024
Ik krijg dan als output:
a1 a1
a2 a2
a3 a3
Dus dan expandeert hij de variabele niet...

  • edm
  • Registratie: December 2000
  • Laatst online: 13-10-2024
Niemand die mij uit de brand kan helpen??

Verwijderd

Ik vrees voor je dat dit niet in simpele shell kan... Waarom probeer je het niet in perl of C?

  • edm
  • Registratie: December 2000
  • Laatst online: 13-10-2024
Wilde iets dergelijks gebruiken om 'zones' in een iptable firewall te hacken. Daarvoor lijkt me een simpel shell script het meest
toepasselijk...

Verwijderd

#!/usr/bin/sh
VAR1="a1 a2 a3"
a1="1 2 3"
a2="4 5 6"
a3="10 9 8"


for X in $VAR1; do
for Y in `eval echo \\${$X}`; do
echo $X $Y
done
done

  • edm
  • Registratie: December 2000
  • Laatst online: 13-10-2024
RonaldL je bent een keizer!
Pagina: 1