abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 18:55 | IT novinky

    Dnešním dnem lze již také v Česku nakupovat na Google Store (telefony a sluchátka Google Pixel).

    Ladislav Hagara | Komentářů: 4
    včera 18:33 | IT novinky

    Apple představil (keynote) iPad Pro s čipem Apple M4, předělaný iPad Air ve dvou velikostech a nový Apple Pencil Pro.

    Ladislav Hagara | Komentářů: 1
    včera 17:11 | Nová verze

    Richard Biener oznámil vydání verze 14.1 (14.1.0) kolekce kompilátorů pro různé programovací jazyky GCC (GNU Compiler Collection). Jedná se o první stabilní verzi řady 14. Přehled změn, nových vlastností a oprav a aktualizovaná dokumentace na stránkách projektu. Některé zdrojové kódy, které bylo možné přeložit s předchozími verzemi GCC, bude nutné upravit.

    Ladislav Hagara | Komentářů: 0
    včera 13:44 | Komunita

    Free Software Foundation zveřejnila ocenění Free Software Awards za rok 2023. Vybráni byli Bruno Haible za dlouhodobé příspěvky a správu knihovny Gnulib, nováček Nick Logozzo za front-end Parabolic pro yt-dlp a tým Mission logiciels libres francouzského státu za nasazování svobodného softwaru do praxe.

    Fluttershy, yay! | Komentářů: 0
    včera 13:11 | IT novinky

    Před 10 lety Microsoft dokončil akvizici divize mobilních telefonů společnosti Nokia a pod značkou Microsoft Mobile ji zanedlouho pohřbil.

    Ladislav Hagara | Komentářů: 2
    6.5. 21:33 | Komunita

    Fedora 40 release party v Praze proběhne v pátek 17. května od 18:30 v prostorách společnosti Etnetera Core na adrese Jankovcova 1037/49, Praha 7. Součástí bude program kratších přednášek o novinkách ve Fedoře.

    Ladislav Hagara | Komentářů: 5
    6.5. 21:11 | IT novinky

    Stack Overflow se dohodl s OpenAI o zpřístupnění obsahu Stack Overflow pro vylepšení OpenAI AI modelů.

    Ladislav Hagara | Komentářů: 1
    6.5. 17:55 | Nová verze

    AlmaLinux byl vydán v nové stabilní verzi 9.4 (Mastodon, 𝕏). S kódovým názvem Seafoam Ocelot. Přehled novinek v příspěvku na blogu a v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    6.5. 17:11 | IT novinky

    Před 50 lety, 5. května 1974 v žurnálu IEEE Transactions on Communications, Vint Cerf a Bob Kahn popsali protokol TCP (pdf).

    Ladislav Hagara | Komentářů: 0
    6.5. 13:44 | Zajímavý článek

    Bylo vydáno do češtiny přeložené číslo 717 týdeníku WeeklyOSM přinášející zprávy ze světa OpenStreetMap.

    Ladislav Hagara | Komentářů: 0
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (64%)
     (7%)
     (13%)
     (16%)
    Celkem 137 hlasů
     Komentářů: 9, poslední včera 22:07
    Rozcestník

    Dotaz: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné

    30.7.2012 15:03 MM
    BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    Přečteno: 1120×
    Ahoj, jak můžu napsat podmínku v bashi která zjistí jestli je pole prázdné nebo něco obsahuje. Díky
    if [ ${MYARRAY} ]
    then
     echo "Pole je plne"
    else
     echo "Pole je prázdné"
    fi

    Řešení dotazu:


    Odpovědi

    Řešení 1× (iKoulee)
    30.7.2012 15:18 l4m4
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    Například (prázdnost)
    test ${#MYARRAY[*]} = 0
    30.7.2012 16:13 MM
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    Nevím jak jsi to myslel ale tohle nefunguje
    if [ ${#MYARRAY[*]} = 0 ]
    then
     echo "Pole je prázdné"
    else
     echo "Pole je plné"
    fi
    30.7.2012 16:33 NN
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    funguje
    30.7.2012 22:10 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    To ${#MYARRAY[*]} vrací počet prvků pole.
    MYARRAY=
    echo "Počet prvků v poli: ${#MYARRAY[*]}"
    
    for((i=0;i<${#MYARRAY[*]};i++)) {
        echo "${#MYARRAY[i]}"
    }
    
    Počet prvků v poli: 1
    0
    unset MYARRAY
    echo "Počet prvků v poli: ${#MYARRAY[*]}"
    
    for((i=0;i<${#MYARRAY[*]};i++)) {
        echo "${#MYARRAY[i]}"
    }
    
    Počet prvků v poli: 0

    31.7.2012 12:49 GeorgeWH | skóre: 42
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    test -z $A && echo nic || echo nieco
    31.7.2012 17:24 l4m4
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    A=('' Gotcha)
    1.8.2012 00:31 GeorgeWH | skóre: 42
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    test -z ${A[*]} && echo nic || echo nieco
    1.8.2012 00:57 l4m4
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    Tak schválně, co myslíš, že to udělá při
    A=(Ignorance strikes back)
    ?
    1.8.2012 15:57 GeorgeWH | skóre: 42
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    test -z "${A[*]}" && echo nic || echo nieco
    David Watzke avatar 1.8.2012 20:35 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    Stále kravina...
    $ A=('')
    $ echo ${#A[*]}
    1
    $ test -z "${A[*]}" && echo nic || echo nieco
    nic
    
    Vzdej to už :-)
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    6.8.2012 11:26 GeorgeWH | skóre: 42
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    aha, a co vlastne to pole obsahuje? vypis mi jeho prvky.
    6.8.2012 12:58 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    Obsahuje jeden prázdný řetězec ''.

    Prázdný řetězec je plnohodnotný prvek pole, i když při výpisu na váš terminál se shodou okolností nevypíše žádný znak :)

    Je to jako prázdná krabice od bot. Někoho sice zajímají výhradně ty boty, protože je třeba obuvník, tak všude vidí jen boty boty boty, ale skladníka zajímají i prázdné krabice.

    Pokud mi někdo předal prázdnou krabici od bot bez tří mega (pole s prázdným řetězcem), je to zcela jiná situace, než kdyby žádná předávka vůbec neproběhla (prázdné pole).
    6.8.2012 18:03 GeorgeWH | skóre: 42
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    miesas hrusky s jablkami. krabica je krabica, topanky su topanky. ak je krabica pole K a topanky prvok K0, tak pole nie je prazdne. ak tam ziadne topanky nie su, tak pole je prazdne, a je jedno, ci tam bude este nejaka igelitka z topanok alebo nie, pretoze v konecnom dosledku je krabica prazdna.
    David Watzke avatar 6.8.2012 18:18 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    Takže tohle je pro tebe taky prázdný pole?
    const char p[] = {0, 0};
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    6.8.2012 18:46 l4m4
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    Právo na tento názor ti nikdo nebere, ale tvůrci bashe to zjevně vidí jinak -- jak zde bylo již několikrát demonostrováno.
    6.8.2012 19:47 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    ak je krabica pole K

    Krabice není pole K. špatný předpoklad => špatný závěr. Kraice je plnohodnotný prvek pole, ať je prázdná nebo plná.
    7.8.2012 07:39 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    Ale nelze popřít existenci krabice…
    Kolik prvků má tedy pole v mém příkladu níže?
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    6.8.2012 13:28 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    Třeba takto:
    #!/bin/bash
    A=('' '6*9' '' '42')
    #A=('')
    echo "Pole A obsahuje: ${#A[@]} položek"
    for (( i=0 ; i < ${#A[@]} ; i++ ))
    do
      echo "Prvek $i má hodnotu: '${A[$i]}'"
    done
    
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    1.8.2012 00:59 Jooky (inactive) | skóre: 39 | blog: Jooky | Bratislava
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    V linuxe je v sekcii 1 manualova stranka "test" (man 1 test)

    Cast zaujimava pre tento problem:
           -n STRING
                  the length of STRING is nonzero
    
           STRING equivalent to -n STRING
    
           -z STRING
                  the length of STRING is zero
    
    Cize moznost je if [ -n "${MYARRAY}" ], alebo if [ -z "${MYARRAY}" ] a potom spravne then/else.
    Kedze je uz pokrocili cas, tak som to pre istotu aj odskusal :)
    $ MYARRAY=a
    $ if [ -n "${MYARRAY}" ]; then  echo "Pole je plne"; else  echo "Pole je prázdné"; fi
    Pole je plne
    $ MYARRAY=
    $ if [ -n "${MYARRAY}" ]; then  echo "Pole je plne"; else  echo "Pole je prázdné"; fi
    Pole je prázdné
    $
    
    Pre zjednodusenie sa to da -n uplne vypustit, ale potom by menej znalym uz nemuselo byt jasne o co ide :)
    $ MYARRAY=a
    $ if [ "${MYARRAY}" ]; then  echo "Pole je plne"; else  echo "Pole je prázdné"; fi
    Pole je plne
    $ MYARRAY=
    $ if [ "${MYARRAY}" ]; then  echo "Pole je plne"; else  echo "Pole je prázdné"; fi
    Pole je prázdné
    $
    
    a mala drobnost na zaver. Tie uvodzovky tam maju svoje miesto ... kedze:
    $ MYARRAY="a b"
    $ if [ -n ${MYARRAY} ]; then  echo "Pole je plne"; else  echo "Pole je prázdné"; fi
    -bash: [: a: binary operator expected
    Pole je prázdné
    $ if [ -n "${MYARRAY}" ]; then  echo "Pole je plne"; else  echo "Pole je prázdné"; fi
    Pole je plne
    $
    
    Bez uvodzvoviek shell cely string najprv rozdeli podla $IFS a na zaklade toho dosadi ako argumenty. Inak povedane v provom priklade vidi test "-n a b" a to nie je co ocakava ...
    1.8.2012 01:23 l4m4
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    To je, s prominutím, totální hovadina.

    Ukázky neobsahují jediné [víceprvkové] pole.

    Pro pole a expanduje ${a} na obsah prvního prvku. Takže uvedné testy nefungují ani pro výše uvedený příkad http://www.abclinuxu.cz/poradna/linux/show/363461#7 a viz také příspěvek od Ashe http://www.abclinuxu.cz/poradna/linux/show/363461#5

    Obecně stringovými testy prostě neodlišíš nenastavené prvky od prázdných:
    a=('')
    vytvoří pole o jednom prázdném prvku, což není totéž jako prázdné pole, které vytvoří například
    unset a
    declare -a a
    1.8.2012 16:00 GeorgeWH | skóre: 42
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    $ A=(" ")
    $ test -z "${A[*]}" && echo nic || echo nieco
    nieco
    $ A=(' ')
    $ test -z "${A[*]}" && echo nic || echo nieco
    nieco
    $ A=('')
    $ test -z "${A[*]}" && echo nic || echo nieco
    nic
    $ A=("")
    $ test -z "${A[*]}" && echo nic || echo nieco
    nic
    
    1.8.2012 16:21 l4m4
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    Ano, tak to je. Stringové testy neodpovídají na otázku po prázdnosti pole. Ale nerozumím, proč to sem znovu vkládáš. Stejně jako nerozumím, proč pole vytváříš
    a=(' ')
    i
    a=(" ")
    když rozdíl je pouze v zápisu, obsah proměnné bude identický.
    7.8.2012 14:42 Jooky (inactive) | skóre: 39 | blog: Jooky | Bratislava
    Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
    Pravda, nemal som pridavat koment tak neskoro vecer :) Ja som trosku ovplyvneni aj programovanim v C. Tam je kazdy retazec v podstate pole znakov. V sheli si ani nepamatam kedy som naposledy pouzil pole znakov ... ten moj koment mozte ignorovat, lebo je to pre iny pripad ... a ja nabuduce nebudem nic pridavat neskoro v noci :)

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.