a=(alpha beta gamma); echo ${#a[@]}         # tulostaa: numeron 3 (matriisin jäsenien lukumäärä, sama kuin: ${#a[*]})
a=(alpha beta gamma); echo ${#a[0]}         # tulostaa: numeron 5 (matriisin ensimmäisen jäsenen pituus)
a=(alpha beta gamma); echo ${#a[1]}         # tulostaa: numeron 4 (matriisin toisen jäsenen pituus)
a=(k kkk kk); echo -e ${a[@]/%/\\n} | wc -L # tulostaa:4 -> matriisin pisimmän jäsenen pituus+1
a=(alpha beta gamma); echo ${a[1]:2}        # tulostaa: ta
a=(alpha beta gamma); echo "${a[@]#a}"      # tulostaa: lpha beta gamma      
a=(alpha beta gamma); echo "${a[@]%a}"      # tulostaa: alph bet gamm        
a=(alpha beta gamma); echo "${a[@]//a/f}"   # tulostaa: flphf betf gfmm      
a=(alpha beta gamma); echo "${a[@]/#a/f}"   # tulostaa: flpha beta gamma    
a=(alpha beta gamma); echo "${a[@]/%a/f}"   # tulostaa: alphf betf gammf     
a=(alpha beta gamma); echo "${a[@]/#/a}"    # tulostaa: aalpha abeta agamma 
a=(alpha beta gamma); echo "${a[@]/%/a}"    # tulostaa: alphaa betaa gammaa 
a=(alpha beta gamma); echo "${a[@]/#/oho}"  # tulostaa: ohoalpha ohobeta ohogamma
a=(alpha beta gamma); echo "${a[@]/%/oho}"  # tulostaa: alphaoho betaoho gammaoho
a=(alpha beta gamma); echo -e ' '"${a[@]/#a/\n}" # tulostaa lph beta gamma

a=(alpha beta gamma); echo -e ' '"${a[@]/%/\\n}  # tulostaa matriisin jäsenet kukin omalle rivilleen; mutta ensimmäinen merkki on ' ' ja sen poisto: sed 's/^ *//' 
a=(alpha beta gamma); printf "%s\n" "${a[@]}"    # tulostaa matriisin teksti-jäsenet kukin omalle rivilleen
a=(0,111 12 7,222); printf "%f\n" "${a[@]}"      # tulostaa matriisin numero-jäsenet kukin omalle rivilleen

a=(alpha beta gamma); echo ${a[*]}               # tulostaa alpha beta gamma  yhteen riviin 
a=(alpha beta gamma); echo ${a[*]:1}             # tulostaa: beta gamma
read -a a <<< 'alfa beta gamma'; echo ${a[*]}    # tulostaa: alfa beta gamma
a=(alpha beta gamma); echo ${a[1]}               # tulostaa beta 
a=(alpha beta gamma [5]=delta); echo ${!a[*]}    # tulostaa 0 1 2 5; elikä mitkä indexit ovat käytössä (jäsenet 3 ja 4 ovat määrittelemättä)
a=(alpha beta gamma); echo ${a[@]:0:1}           # tulostaa alpha	
a=(alpha beta gamma [5]=delta); echo ${a[@]:2:3} # tulostaa: gamma delta (matriisin a jäsenestä 3 kolme jäsentä eteenpäin)  
a=(alpha beta gamma);a+=("lisätty");echo ${a[@]} # tulostaa: alpha beta gamma lisätty    (elikä jäsenen lisääminen matriisiin) 
a=(alpha beta gamma); echo "${a[@]:(-2)}"        # tulostaa: beta gamma   (elikä kaksi viimeistä jäsentä)
a=(kukkuluuruu55 -78 aamu); echo ${a[@]:1:1}     # tulostaa -78

Käskyn tulosteesta muudostetaan matriisi näin: matriisi=($(käsky käskyn prametrit))  # siis esimerkiksi: matriisi=($(ls ~))
erota levyllä olevasta matriisista osoitettava sarake kokonaisuudessaan: readarray arr < tiedosto2 | cut -d ' ' -f2;  echo " ${arr[*]}"

Lukujen lukeminen matriisiin:
read -p 'anna lukuja välilyöntien eroittamina: ' apu; readarray matriisi < <(echo $apu); echo 'antamasi luvut:';for i in ${matriisi[@]}; do echo $i; done
- lukuja voi olla niin monta kuin haluaa. Luvut saavat olla mitätahansa tekstiä jossa ei ole välilyöntejä

matriisin lukeminen tiedostosta:
i=0; while IFS=$'\n' read -r rivi; do matriisi[i]="${rivi}"; ((++i)); done < tiedosto
i=0; cat tiedosto | while read rivi; do matriisi[i]="${rivi}"; ((++i)); done
readarray matriisi < tiedosto 
mapfile -t matriisin_nimi < <(find mistä find_rajoittee)
matriisin lukeminen kansiosta: IFS=$'\n'; apu=($(ls ~/OMATSKRIPTIT)); echo -e ' '"${apu[@]/%/\\n}"; unset IFS
matriisin lukeminen tekstijonosta: matriisi=(1 2 3 4 5)          
matriisin lukeminen toisesta matriisista: matriisi=("${apu[@]}")
matriisin lukeminen toisesta matriisista jättäen ne rivit pois joilla on valittava teksti jossainkohtaa (tässä esimerkissä 3.3): matriisi=("${apu[@]/*3.3*/}")
matriisin lukeminen toisesta matriisista vaihtaen millähyvänsä rivillä määrättävän tekstin:
matriisi=("${apu[@]//menuentry/menuhih}")
joskus koodista tulee sangen sottaista: matriisi2=("${matriisi[@]//*jotakin*/'rivi poistettu\n'}"); echo -e " ${matriisi2[@]}" 
readarray matriisi < ~/file1; echo "${matriisi[@]//a/ööön}
matriisien liittäminen: matriisi=("${apu[@]}" "${apu2[@]}") 
matriisiin liittäminen: matriisi+=("${apu[@]}")

a=(/home/petteri/alpha /home/petteri/beta /home/petteri/gamma); echo -e ' '"${a[@]/#\/home\/petteri\//\\n}"  # tulostaa omille riveilleen: alpha beta gamma

yf=({17..63..2})  # tekee matriisin jonka arvot askeltaa 17,19,21...63 ja osoitteet 0,1,2,3,4...23.
echo ${yf[0]} tulostaa siis 17 niinkuin muuten myös echo $yf 

matriisin lukeminen tiedostosta: readarray a < /boot/grub/grub.cfg  ja matriisin kirjoittaminen tiedostoon: echo -e ' '"${a[@]/%/\\n}" > tiedostonimi
eval matriisi=($(find  ~/omatskriptit/ARKISTO/skriptit -maxdepth 1 | sed "s/^ */'/g;s/ *$/'/g")) # muuten kaikki menee jäseneen 0. Huomaa sed:n heittomerkit
summa matriisin sarakkeesta; echo -e ' '"${a[@]/%/\n}" |  awk '{summa+=$3} END {print "summa on",summa}'
matriisin kopiointi toiseen matriisiin siten että myös indexit säilyy: for n in ${!matriisi[*]}; do matriisinkopio[$n]=${matriisi[$n]}; done
naytto[$Rivi]=${nayttoRivi:0:$RivinPituus}

dir=$(ls -R /home/petteri/OMATSKRIPTIT); echo -e ' '"${dir[@]/%/\n}" # katso: OMATSKRIPTIT/KOE- JA ESIMERKKISKRIPTIT/matriisin tulostusta

funktion parametrit talletetaan matriisiin seuraavalla keinolla: scale=($(echo $tulos | grep -Po "[[:digit:]]*"))
- muuttuja scale on sama kuin matriisn scale jäsen 0 (elikä ${scale[0]})
- ensimmäinen parametri (kaikki sen numerot) ovat jäsenessä 0 ja seuraava parametri menee jäseneen 1 ... ja järjestyksessä eteenpäin. 

matriisi=($(grep -Po  "[\+\.\-0-9]*" <<< $teksti)); numero=$(echo "${matriisi[0]}") # teksti:n numerosarjat matriisiin, mutta perään saattaa tulla +
matriisi=(ssa+ ssssssb+ sc+ ssssd+); matriisi=$(echo -e ' '"${matriisi[@]/%+/\n}"); echo -e ' '"${matriisi[@]/%/\n}" # poista perästä + -merkki

c=("${a[@]}"; c+=("${b[@]}")    # matriisien yhteenliittäminen tapahtuu selväpiirteisimmin lisäämällä matriisi kerrallaan.
- jos ei sed:iä ole niin:a=$(cat /boot/grub/grub.cfg); time echo -e "${a[@]//menuentry/menuhih}"

apu=($( eval echo $(echo "({1..50})" | grep -Pzoi '(?sU){.*}'))); echo -e ' '"${apu[@]/%/\\n}" # matriisin määritys tavalla:({1..50}) 

matriisin passaaminen funktioon: function matriisin_pisin_jäsen () { echo $(($(eval echo -e "' '\${$1[@]/%/\\\n}" | wc -L)-1));}

testaa onko jäsen määritelty:    unset array; array[1]=1; [[ ${array[1]} ]] && echo jäsenellä on arvo || echo jäsenellä ei ole arvoa  # 0:kin on arvo
testaa onko matriisi määritelty: unset apu; apu[9]=0;[[ $(echo ${apu[@]}) ]] && echo matriisi on määritelty || echo matriisia ei ole määritelty

mat=({1..1000});  echo ${mat[@]: -1} # tulosta matriisin viimeinen jäsen
