#!/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?
- 1610 megtekintés
Hozzászólások
(Téves)
- A hozzászóláshoz be kell jelentkezni
$VAR_Si
Si???
Ettől függetlenül, nem tudom, hogy össze lehet-e így rakni két változóból egyet?
- A hozzászóláshoz be kell jelentkezni
Az S valószínűleg $ akart lenni. Én sem tudom, hogy el lehet-e érni úgy változót, hogy a nevét összepakoljuk. Használj tömböt...
- A hozzászóláshoz be kell jelentkezni
Tömbbel esetleg?
http://tldp.org/LDP/abs/html/arrays.html
It doesn't matter if you like my song as long as you can hear me sing
- A hozzászóláshoz be kell jelentkezni
nekem a fenti pelda mashol akad el (nincs bash keznel)
de hatarozottan emlekszem, hogy a $VALTOZO_$MASIKVALTOZO forma mukodik
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
#!/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" :)
- A hozzászóláshoz be kell jelentkezni
Nekem is volt hasonló problémám, a megoldást az eval jelentette
#!/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
- A hozzászóláshoz be kell jelentkezni
Akkor is csak a ciklusváltozót írja ki.
- A hozzászóláshoz be kell jelentkezni
Avagy így:
r="VAR_$i";
echo ${!r};
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Köszi mindenkinek.
- A hozzászóláshoz be kell jelentkezni