hogyan számoljuk meg a bash-ban definiált tömb hosszát?

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

  • Ne feledje, hogy be kell ${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 a array=("item 1" "item 2" "item 3").

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 .

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük