Aikoinaan ei annettu pienintäkään toivoa sille että kaksiulotteiset matriisit toimisivat joskus - että voisi tehdä funktion hakemaan vapaa-muotoisesta matriisista yksi jäsen kun nimetään matriisi ja sen rivi ja sarake. Sellaista kaivattiin jo vuosikymmeniä sitten ja monet yrittivät sellaista tehdäkin mutta asia ei edistynyt vähääkään. Kuitenkin BASH on aina osannut kaksiulotteisten matriisien käsittelemisen mutta skriptiä sitävarten ei vain ole tehty koska ei osattu valita oikeita käskyjä - löytyi ne kyllä äskettäin mutta koska kymmenen vuotta sitten BASH:iin tuli paremmat toiminnot niin tämä on niillä tehty sillä nopeutta tuli roimasti lisää.
En alkuunkaan usko, ettei kukaan ole aikoinaan tehnyt tätä toimintoa sillä se on niin yksinkertainen että eiköhän se ole kuulunut jo alkuperäisiin suunnitelmiin siitä miten matriisien tulee toimia BASH:issakin.
Mutta koska matriisin nimi passataan nimenä eikä arvoina on tässä paljon normaalista poikkeavaa. Käsiteltävät matriisit voivat olla minkä muotoisia tahansa ja muodostettu vaikka minkälaisista olioista: kokonaisluvuista, desimaalivuista, tekstistä ja vaikka nuolenpää-kirjoituksesta ... Nopeuskin on BASH:iksi ihan siedettävä.
Nykyvaatimusten mukaan tämä on sittenkin kelvottoman hidas mutta tämä onkin vain osoitus että kyllä BASH:issa toimivat myös kaksi-ulotteiset matriisit - ja samalla periaatteella kolmi-ulotteisetkin.
On täysin mahdotonta saada minkäänlaista käsitystä BASH:in kyvyistä koska niin paljon mahdottomaksi väitettyä on osottautunut toimivaksi - ja kun aikaisemmin isot työt kestivät sekunteja niin nyt niistä monet kestävät millisekunteja. Vaikka pitää edelleen paikkansa että BASH on ohjelmointikieleksi rääpäle niin 'tunnelin päässä on valoa'.
---
esimerkki - ensin tehdään matriisi - voisi sen lukeakin jostain - ja sitten haetaan siitä arvo rivitä:2 sarakkeesta 8:
matriisi=([0]="1 2 3 4 5 6 7 8" [1]="a b c d e f g h" [2]="1 22 333 4444 55555 666666 7777777 8.8888e-88"); echo tämmöinen matriisista tuli:; echo; printf "%s\n" "${matriisi[@]}" | column -t; echo
function hae_arvo_matriisista () { # kutsu on muotoa: matriisin_nimi rivinumero sarakenumero
apu1=$(declare -p $1); declare ${apu1:8:2} apu2=${apu1#*=}; apu=($(echo ${apu2[$(($2-1))]})); echo ${apu[@]:$(($3-1))} ;}
time hae_arvo_matriisista matriisi 3 8
- ajan kulumisen kannalta on melkein yksilysti mitä numeroiden paikalla on: pitkää tai pätkää, numeroita, kirjaimia, mitähyvänsä merkkejä.
- samoin matriisin koko vaikuttaa suoritusaikaan vain vähäsen