Jsem nováčkem v bash a nemohu najít dobrý návod, jak odpovědět na mou otázku.
array=( item1 item2 item3 ) for name in ${array[@]}; do echo current/total ... some other codes done
Chci vypočítat hodnotu current a total jako očekávaný výstup této hodnoty:
1/3 2/3 3/3
Děkujeme za jakékoli tipy.
Komentáře
Odpovědět
K indexům pole můžete přistupovat pomocí ${!array[@]} a délce pole pomocí ${#array[@]} např :
#!/bin/bash array=( item1 item2 item3 ) for index in ${!array[@]}; do echo $index/${#array[@]} done
Všimněte si, že protože pole bash jsou indexována na nulu , ve skutečnosti získáte:
0/3 1/3 2/3
Pokud chcete, aby počet běžel od 1, můžete $index nahradit $((index+1)). Pokud chcete hodnoty i indexy, můžete použít "${array[index]}" tj.
#!/bin/bash array=( item1 item2 item3 ) for index in ${!array[@]}; do echo $((index+1))/${#array[@]} = "${array[index]}" done
dávat
1/3 = item1 2/3 = item2 3/3 = item3
Komentáře
- Pokud chci získat 1,2,3, mohu Dělám to:
echo ($index+1)/${#array[@]}? - btw, zdá se, že tímto způsobem ' nemůžu získat item1, item2, item3 ve smyčce. Stále mám další kód pro řešení položek item1, item2, item3. Děkujeme,
- viz upravený příspěvek.
odpověď
nulový index je naprosto platný pokud si myslíte, že index je ve skutečnosti offset od základní adresy pole. To je ve skutečnosti norma, i když se liší od dialektu k dialektu. Se starým jazykem Jovial obsahoval [0] maximální velikost pole. Začalo to tedy [1].
U některých základních implementací můžete libovolně zvolit 0 nebo 1 jako první index. A alespoň jeden Basic vám umožňuje určit pole pro indexování fron [n] do [m]. kde n a m mohou mít jakoukoli celočíselnou hodnotu, i zápornou, pokud n je menší menší nebo roven m. Hodnota n je odečtena od zadaného [index], jako index-n = 0 pokud index odpovídá n.
Ale ve svém vlastním kódu můžete dělat totéž a ještě více Můžete dokonce obrátit pořadí pole takto:
dim array(0, abs(m-n)); step=sign(m-n); if n > m then base=m else base=n; fi
Tento příklad kódu je ve skutečnosti pouze částečně z jednoho jazyka. Jen jsem chtěl, aby to bylo čitelnější. Kroková proměnná se používá k řízení zdánlivého směru, ve kterém se pohybujete, ať už kladném nebo záporném, a používá se k výpočtu efektivního indexu při vstupu do pole nebo z něj, který je ve skutečnosti vždy kladný od [0].
${array[@]}v uvozovkách. Jinak bude provedeno rozdělení slov a na vstupech, jako jearray=("item 1" "item 2" "item 3"), získáte nežádoucí výsledky.