Nem vagyok új a bashban, és nem találok jó oktatóanyagot a kérdésem megválaszolásához.
array=( item1 item2 item3 ) for name in ${array[@]}; do echo current/total ... some other codes done
Szeretném kiszámítani a current
és total
értéket, mint ennek várható kimenetét:
1/3 2/3 3/3
Köszönet mindenféle tippért.
Megjegyzések
Válasz
A tömbindexeket a ${!array[@]}
, a tömb hosszát pedig a ${#array[@]}
segítségével érheti el. , például :
#!/bin/bash array=( item1 item2 item3 ) for index in ${!array[@]}; do echo $index/${#array[@]} done
Ne feledje, hogy mivel a bash tömbök nulla indexeléssel vannak ellátva , akkor valóban megkapja: 58f9ec98d9 “>
Ha azt akarja, hogy a számlálás 1-től induljon, akkor a $index
szöveget $((index+1))
-re cserélheti. Ha az értékeket és az indexeket is szeretné használni, használhatja a "${array[index]}"
azaz
#!/bin/bash array=( item1 item2 item3 ) for index in ${!array[@]}; do echo $((index+1))/${#array[@]} = "${array[index]}" done
ad
1/3 = item1 2/3 = item2 3/3 = item3
Megjegyzések
- Ha 1,2,3-at szeretnék kapni, Ezt csinálom:
echo ($index+1)/${#array[@]}
? - btw, úgy tűnik, hogy így ' nem tudom megszerezni a item1-et, item2, item3 a hurokban. Még mindig van más kódom az item1, item2, item3 cuccok kezelésére. Köszönöm,
- a szerkesztett bejegyzés megtekintése.
válasz
A nulla index tökéletesen érvényes ha úgy gondolja, hogy az index valójában egy eltolás egy tömb alapcíméből. Ez valójában a norma, bár dialektusonként változik. A régi joviális nyelvvel a [0]
valójában a tömb maximális méretét tartalmazta. Tehát [1]
.
Néhány Basic megvalósítással önkényesen választhat, hogy 0
vagy 1
mint első index. És legalább egy Basic lehetővé teszi tömbök kijelölését a fron [n]
indexeléséhez [m]
. div id = “cdab299c1e”>
és m
tetszőleges egész értéke lehet, még negatív is, mindaddig, amíg n
kevesebb vagy egyenlő azzal: m
. Az n
értéket kivonják a beírt [index]
értékből, mint index-n = 0
, ha az index megfelel a n
fájlnak.
De ugyanezt és még többet is megtehet a saját kódjában Még a sorrendet is megfordíthatja egy tömb ilyen módon:
dim array(0, abs(m-n)); step=sign(m-n); if n > m then base=m else base=n; fi
Ez a kódpélda valójában csak részben egy nyelvből áll. Csak azt akartam, hogy olvashatóbb legyen. A lépésváltozó a látszólagos irány vezérlésére szolgál, legyen az pozitív vagy negatív, és kiszámítja az effektív indexet a tömbbe való belépéskor vagy onnan való kilépéskor, amely valójában mindig pozitív a .
${array[@]}
kettős idézőjelben. Ellenkező esetben szófelosztás történik, és nem kívánt eredményeket fog elérni olyan bemeneteken, mint aarray=("item 1" "item 2" "item 3")
.