Változó értékének kiíratása [megoldva]

Fórumok

#!/bin/bash
VAR_1="ert"
VAR_2="hzu"
VAR_3="drt"
VAR_4="nji"

i=1
while [ $i -le 4 ];
echo $VAR_Si
i=$(($i+1))
done

A VAR_1 , a VAR_2 , a VAR_3 és a VAR_4 tartalmát kellene kiírni, de nem akarja.
Tudom hogy láma kérdés de mi a hiba?

Hozzászólások

$VAR_Si

Si???

Ettől függetlenül, nem tudom, hogy össze lehet-e így rakni két változóból egyet?

nekem a fenti pelda mashol akad el (nincs bash keznel)
de hatarozottan emlekszem, hogy a $VALTOZO_$MASIKVALTOZO forma mukodik

Működik, csak nem a példában várt eredményt adja:


fater@fater-desktop:~$ VAR_1=19
fater@fater-desktop:~$ i=1
fater@fater-desktop:~$ echo $VAR_$i
1

Ez szerintem jogos is, mert másképp összekuszálódna a bash lába:

a=1
b=2
a_b=3

Az _ -nak kellene speciális karakterkén működnie a kívánt eredményhez.
De, tudtommal nem az.


#!/bin/bash
VAR_1="ert"
VAR_2="hzu"
VAR_3="drt"
VAR_4="nji"
i=1
while [ $i -le 4 ]; do
  echo $VAR_$i
  i=$(($i+1))
done

a do hiányzott, meg persze nem "$VAR_Si" hanem "$VAR_$i" :)

Akkor is csak a ciklusváltozót írja ki.

Hajjaj hup szinvonal,
char_array[1]="a";
char_array[2]="b";
char_array[3]="c";
char_array[4]="d";
for i in $(seq 1 4);
do
printf "%s" ${char_array[$i]};
done;
printf "\n";
a_1="a";
a_2="b";
for i in $(seq 1 2);
do
eval "printf \"%s\" \$a_$i";
done;
printf "\n";

OUT:
$ sh a.sh
abcd
ab

Olvass infot, hasznald a man-t ,legyel kedves es ott a google.

Na nehogy ágyúval lőjünk verébre!


#!/bin/bash
VAR_1="ert"
VAR_2="hzu"
VAR_3="drt"
VAR_4="nji"

i=1
while [ $i -le 4 ];
do
eval echo \$VAR_$i
i=$(($i+1))
done

vagy a while helyett még jobb a


for i in $(seq 1 4)
do
eval echo \$VAR_$i
done

Minek bonyolítani a dolgokat, ha egyszerűen is megy?

Üdv!
____________________________________________________________
Slackware 12/current - linux-2.6.23-olorin - KDE 3.5.8