1
Ohjelmointi, palvelimet ja muu edistyneempi käyttö / Vs: Skriptiajuri
« Uusin viesti kirjoittanut petteriIII tänään kello 18:50 »kokeillaan toimivatko assosiatiiviset matriisit myös:
tulostus: 4 joo 2
Joten toimivathan ne - ainakin jollain tavalla. Assosiatiivinen matriisi muuten aakkostaa itsekseen jotenkin.
---
Miksi parametrien palauttamisesta puhutaan jatkuvasti? - tai alkaahan puhe jo harveta kun BASH on tuomittu jo kauan sitten. Onko syy se että jo silloin aikoinaan alettiin suunitella BASH:in romutusta sillä se on virtuoosien kannalta nolo opetettava - jokainen lyö kirveensä kiveen liian usein. Joten ei tosiaan haluttu ihmisten käsittävän mihin kaikkeen BASH kykenee sillä kykenevästä BASH:ista ei päästäisi koskaan eroon. Sillä niinkuin äsken esitettiin niin BASH saa funkktio-parametrien palauttamisessa aikaan saman lopputuloksen - nopeammin ja sillätavalla millä asia pitäsikin hoitaa. Samoin ne hyvin toimivat desimaalilaskut? Ja monia muitakin mahdottomiksi väitettyjä toimintoja olen saanut toimimaan - mutta niiden merkitys on toistaiseksi ainakin minulle epäselvä sillä siitä on jo kauan kun teoriat kunnolla hallitsin.
---
Mikäli tarvitsee 'palauttaa' funktiosta vain toiminnan lopputulos kannattaa se tehdä niin että se lopputulos tulostetaan funktiossa ja pääohjelmassa se napataan johonkin muuttujaan käsky-rakenteella: muuttuja_nimi=$(funktiokutsu parametrit) - palautus tapahtuu siis näyttöpuskurin kautta - toisella tavalla kuin muissa kielissä mutta yhtä tehokkaasti. Myös matriisi voidaan palauttaa tällä tavalla:
- käsky: mutrix=($(koe matrix)) on tarpeen vain jos matriisi nimeltään:mutrix halutaan aikaansaada. Mutta usein halutaan vain tuo tulostus ja sehän on funktiossa tehty jo. Enää ei ole tarvetta 'palauttaa' yhtään mitään - kutsua voi lyhyesti: matrix=(1 2 3 4 5 6 7 8 9); koe matrix .
- näyttöpuskurin lukeminen rakenteella: muuttuja_nimi=$(funktiokutsu parametrit) tai lukemalla sen putkeen nollaa näyttöpuskurin eikä mitään kirjoiteta näytölle, muuten se kyllä näytölle aikanaan päätyy.
Aina ei tarvitse sitä näyttöpuskuria edes lukea vaan sitä voi käsitellä suoraankin, esimerkiksi:
function koe () { echo 123456789012345678901234567890; echo 1110000; echo 12345678901234567890 ;}; koe | wc -L
Tässä funktion kaikki tulosteet menevät näyttöpuskuri-matriisissa omalle rivilleen, näyttöpuskuri työnnetään putkeen joka johtaa käskyyn: wc -L joka tulostaa näyttöpuskurin pisimmän rivin pituuden joka on 30, toiset rivit ovat pituudeltaan 20 ja 9. Rakennetta: echo $(koe) ei siis tarvita.
- ja yksi keino parametrien palautuksessa jää jotenkin pimentoon: funktiossa voi myös kirjoittaa kovalevylle - ja myös kovalevyn nopea vastine RAM-levy kuuluu BASH:in perusvarustuksiin - ja funktiosta tultua kovalevy luetaan. Levyjen käsittelyyn on buffereita, tiedosto-kuvaajia, pelejä ja pensseleitä - ihan oma maailmansa - monimutkainen kylläkin sillä käskyt ovat kauheaa merkkisotkua - kirjastot on tarkoitettu muunmuassa muuntamaan käskyjä ja käskyryhmiä helposti muistettaviksi - mutta koska BASH:in ei haluta toimivan hyvin niin kirjastoille on määrätty käyttökielto - se onkin paras keino kielen tuhoamiseksi. Kovalevyllehän asiat yleensä muutenkin päätyvät - onko sillä niin väliä koska se tehdään?
---
- loppuyhteenveto kaikesta edelläesitetystä: kyllähän tämä vähän turhauttaa koskei asialle voi tehdä enää mitään. ChatGpt ehkä voisi tehdä jotain vieläkin joten ChatGpt:n tekemä koodi kiirehdittiin tekemään Linuxissa 'laittomaksi'. Mutta kukaan ei voi edes aavistaa mihin BASH pystyisi jos sen annettaisiin kehittyä - kolmenkymmenen vuoden hyljeksintää ei kyllä luultavasti koskaan saa kurottua kiinni. Tehdyt esteet ovat useimmiten vain tahallista väärin ymmärtämistä - sillä eihän se ole rikollista etteivät alan johtavat virtuoosit alansa kaikkia muttereita tunne? Varmasti aikoinaan tunsivat, mutta nykyään se on kylläkin vain opittu asenne. Asenne joka on minullekin opetettu - ja paljon kunnollistakin särkyy kun oppeja hylkää.
Koodia: [Valitse]
function koe () { apu1=$(declare -p $1); declare ${apu1:8:2} apu2=${apu1#*=}; echo ${apu2[@]} ;}; matriisi[555]=2; matriisi[17]=joo; matriisi[ei]=4; koe matriisi
tulostus: 4 joo 2
Joten toimivathan ne - ainakin jollain tavalla. Assosiatiivinen matriisi muuten aakkostaa itsekseen jotenkin.
---
Miksi parametrien palauttamisesta puhutaan jatkuvasti? - tai alkaahan puhe jo harveta kun BASH on tuomittu jo kauan sitten. Onko syy se että jo silloin aikoinaan alettiin suunitella BASH:in romutusta sillä se on virtuoosien kannalta nolo opetettava - jokainen lyö kirveensä kiveen liian usein. Joten ei tosiaan haluttu ihmisten käsittävän mihin kaikkeen BASH kykenee sillä kykenevästä BASH:ista ei päästäisi koskaan eroon. Sillä niinkuin äsken esitettiin niin BASH saa funkktio-parametrien palauttamisessa aikaan saman lopputuloksen - nopeammin ja sillätavalla millä asia pitäsikin hoitaa. Samoin ne hyvin toimivat desimaalilaskut? Ja monia muitakin mahdottomiksi väitettyjä toimintoja olen saanut toimimaan - mutta niiden merkitys on toistaiseksi ainakin minulle epäselvä sillä siitä on jo kauan kun teoriat kunnolla hallitsin.
---
Mikäli tarvitsee 'palauttaa' funktiosta vain toiminnan lopputulos kannattaa se tehdä niin että se lopputulos tulostetaan funktiossa ja pääohjelmassa se napataan johonkin muuttujaan käsky-rakenteella: muuttuja_nimi=$(funktiokutsu parametrit) - palautus tapahtuu siis näyttöpuskurin kautta - toisella tavalla kuin muissa kielissä mutta yhtä tehokkaasti. Myös matriisi voidaan palauttaa tällä tavalla:
Koodia: [Valitse]
function koe () { apu1=$(declare -p $1); declare ${apu1:8:2} apu2=${apu1#*=}; apu2[2]=ohhoh; echo ${apu2[@]} ;}; matrix=(1 2 3 4 5 6 7 8 9); mutrix=($(koe matrix)); echo ${mutrix[@]}
- mutrix on pesunkestävä matriisi vaikka se tulostetaankin tässä yhteen riviin.- käsky: mutrix=($(koe matrix)) on tarpeen vain jos matriisi nimeltään:mutrix halutaan aikaansaada. Mutta usein halutaan vain tuo tulostus ja sehän on funktiossa tehty jo. Enää ei ole tarvetta 'palauttaa' yhtään mitään - kutsua voi lyhyesti: matrix=(1 2 3 4 5 6 7 8 9); koe matrix .
- näyttöpuskurin lukeminen rakenteella: muuttuja_nimi=$(funktiokutsu parametrit) tai lukemalla sen putkeen nollaa näyttöpuskurin eikä mitään kirjoiteta näytölle, muuten se kyllä näytölle aikanaan päätyy.
Aina ei tarvitse sitä näyttöpuskuria edes lukea vaan sitä voi käsitellä suoraankin, esimerkiksi:
function koe () { echo 123456789012345678901234567890; echo 1110000; echo 12345678901234567890 ;}; koe | wc -L
Tässä funktion kaikki tulosteet menevät näyttöpuskuri-matriisissa omalle rivilleen, näyttöpuskuri työnnetään putkeen joka johtaa käskyyn: wc -L joka tulostaa näyttöpuskurin pisimmän rivin pituuden joka on 30, toiset rivit ovat pituudeltaan 20 ja 9. Rakennetta: echo $(koe) ei siis tarvita.
- ja yksi keino parametrien palautuksessa jää jotenkin pimentoon: funktiossa voi myös kirjoittaa kovalevylle - ja myös kovalevyn nopea vastine RAM-levy kuuluu BASH:in perusvarustuksiin - ja funktiosta tultua kovalevy luetaan. Levyjen käsittelyyn on buffereita, tiedosto-kuvaajia, pelejä ja pensseleitä - ihan oma maailmansa - monimutkainen kylläkin sillä käskyt ovat kauheaa merkkisotkua - kirjastot on tarkoitettu muunmuassa muuntamaan käskyjä ja käskyryhmiä helposti muistettaviksi - mutta koska BASH:in ei haluta toimivan hyvin niin kirjastoille on määrätty käyttökielto - se onkin paras keino kielen tuhoamiseksi. Kovalevyllehän asiat yleensä muutenkin päätyvät - onko sillä niin väliä koska se tehdään?
---
- loppuyhteenveto kaikesta edelläesitetystä: kyllähän tämä vähän turhauttaa koskei asialle voi tehdä enää mitään. ChatGpt ehkä voisi tehdä jotain vieläkin joten ChatGpt:n tekemä koodi kiirehdittiin tekemään Linuxissa 'laittomaksi'. Mutta kukaan ei voi edes aavistaa mihin BASH pystyisi jos sen annettaisiin kehittyä - kolmenkymmenen vuoden hyljeksintää ei kyllä luultavasti koskaan saa kurottua kiinni. Tehdyt esteet ovat useimmiten vain tahallista väärin ymmärtämistä - sillä eihän se ole rikollista etteivät alan johtavat virtuoosit alansa kaikkia muttereita tunne? Varmasti aikoinaan tunsivat, mutta nykyään se on kylläkin vain opittu asenne. Asenne joka on minullekin opetettu - ja paljon kunnollistakin särkyy kun oppeja hylkää.