tömb elemeit nem iratja ki

Üdv!

Az alábbi programkóddal azt akarom elérni, hogy a tömb elemeit irja ki

i="0"

until test $i -eq 4

do

 let i=$i+1

 echo $ {tomb[$i]}

done

 

Az echo-nál baj van mert nem értékeli ki ,csak behelyettesíti a számot(1-4 ig ) de a tárolt értéket nem iratja ki!

Hozzászólások

Szerkesztve: 2022. 05. 04., sze – 15:33

Mi az okod a do until loopra?

for i in seq 4; do echo "${tomb[${i}]}"; done

Vagy ha nem bánod, hogy nem sh, hanem bash

for ((i=0; i < 4; i++)); do echo "${tomb[$i]}"; done

Ha parancssorból hozod létre a változót, majd egy scripttel akarod feldolgozni, akkor azért észre kellene venni, hogy a script már egy másik shellben hajtódik végre. Márpedig ha nem exportálod a változót, akkor abban az alshellben nem is lesz ilyen változó, ezért ad rossz eredményt a kódod. (Amúgy  valóban a szóköz nélküli ${tombvaltozo[$i]} formával hivatkozz a kívánt elemre!) Tekintettel arra, hogy a tömbváltozó exportja az messze van a hordozható kódtól, én azt tudnám javasolni, hogy ne is próbálkozz ilyesmivel, helyette:

a) magában a scriptben hozd létre a tömbváltozót

tomb=( 1 2 3 4 5 )

ekkor persze konstansul ezeket az értékeket tudod csak baszkurálni

 

b) a scriptedet ne a megszokott módon  (pl: ./scriptem) formában, hanem a . nevű parancs segítségével futtasd:

. ./scriptem

formában (ekkor ugyanabban a shellben fut, tehát eléri az eredeti shellben létrehozott lokális változókat)

 

c) a scriptnek paraméterként add át azokat az értékeket amiket majd a tömbbe akarsz rakniés a tömbváltozó feltöltését a paraméterekből intézd, valahogy így :

tomb=( "$@" )

így simán lehet újabb és újabb paraméterekkel hívva tesztelni a scriptedet, hogy jól csináltad.