abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 22:33 | Nová verze

    Byla vydána nová major verze 5.0.0 svobodného multiplatformního nástroje BleachBit (GitHub, Wikipedie) určeného především k efektivnímu čištění disku od nepotřebných souborů.

    Ladislav Hagara | Komentářů: 2
    2.5. 22:22 | Komunita

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za duben (YouTube).

    Ladislav Hagara | Komentářů: 0
    2.5. 19:11 | IT novinky

    Provozovatel čínské sociální sítě TikTok dostal v Evropské unii pokutu 530 milionů eur (13,2 miliardy Kč) za nedostatky při ochraně osobních údajů. Ve svém oznámení to dnes uvedla irská Komise pro ochranu údajů (DPC), která jedná jménem EU. Zároveň TikToku nařídila, že pokud správu dat neuvede do šesti měsíců do souladu s požadavky, musí přestat posílat data o unijních uživatelích do Číny. TikTok uvedl, že se proti rozhodnutí odvolá.

    Ladislav Hagara | Komentářů: 3
    2.5. 11:22 | Zajímavý projekt

    Společnost JetBrains uvolnila Mellum, tj. svůj velký jazykový model (LLM) pro vývojáře, jako open source. Mellum podporuje programovací jazyky Java, Kotlin, Python, Go, PHP, C, C++, C#, JavaScript, TypeScript, CSS, HTML, Rust a Ruby.

    Ladislav Hagara | Komentářů: 2
    2.5. 09:11 | Bezpečnostní upozornění

    Vývojáři Kali Linuxu upozorňují na nový klíč pro podepisování balíčků. K původnímu klíči ztratili přístup.

    Ladislav Hagara | Komentářů: 2
    1.5. 20:00 | Komunita

    V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.

    Ladislav Hagara | Komentářů: 3
    1.5. 19:22 | IT novinky

    Oficiální ceny Raspberry Pi Compute Modulů 4 klesly o 5 dolarů (4 GB varianty), respektive o 10 dolarů (8 GB varianty).

    Ladislav Hagara | Komentářů: 0
    30.4. 22:33 | Nová verze

    Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.

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

    Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.

    karkar | Komentářů: 0
    30.4. 12:11 | Humor

    Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).

    Ladislav Hagara | Komentářů: 7
    Jaký filesystém primárně používáte?
     (58%)
     (1%)
     (9%)
     (21%)
     (4%)
     (2%)
     (2%)
     (0%)
     (1%)
     (3%)
    Celkem 513 hlasů
     Komentářů: 19, poslední 30.4. 11:32
    Rozcestník

    Dotaz: bash pole - ako pridat polozku do pola z while cyklu?

    24.10.2022 11:18 gsnak | skóre: 22 | blog: gsnak
    bash pole - ako pridat polozku do pola z while cyklu?
    Přečteno: 347×
    Chcem v bash-i pridat hodnotu do pola, ale pretoze som vo while "podprograme" tak to nefunguje:
    myArray=("cat" "dog" "mouse" "frog")
    A=("a" "b" "c")
    A+=("d")
    ls *.mp3 | sort -R | while read i; do
        A+=( "$i" );
        echo $i
    done
    for i in ${A[@]}; do
        echo "--- $i"
    done
    
    Vypise to len a b c d, nic z toho while cyklu.
    Čo Rys, to vrah!

    Řešení dotazu:


    Odpovědi

    24.10.2022 11:54 X
    Rozbalit Rozbalit vše Re: bash pole - ako pridat polozku do pola z while cyklu?
    Nefunguje to, protoze roura vytvari subshell:
    for i in $(ls *.mp3 | sort -R); do
            A+=("$i")
    done
    
    24.10.2022 12:50 gsnak | skóre: 22 | blog: gsnak
    Rozbalit Rozbalit vše Re: bash pole - ako pridat polozku do pola z while cyklu?
    Toto nefunguje spravne ak subory obsahuju medzery
    Čo Rys, to vrah!
    24.10.2022 13:06 X
    Rozbalit Rozbalit vše Re: bash pole - ako pridat polozku do pola z while cyklu?
    Muzes upravit IFS a nebo lepe odstranit mezery.
    24.10.2022 12:51 gsnak | skóre: 22 | blog: gsnak
    Rozbalit Rozbalit vše Re: bash pole - ako pridat polozku do pola z while cyklu?
    lebo for to cita po slovach nie po riadkoch, a ked pouzijem while tak to zase vytvara subshell
    Čo Rys, to vrah!
    24.10.2022 13:55 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
    Rozbalit Rozbalit vše Re: bash pole - ako pridat polozku do pola z while cyklu?
    a není řešením ls -l ?
    24.10.2022 14:33 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
    Rozbalit Rozbalit vše Re: bash pole - ako pridat polozku do pola z while cyklu?
    nebo ls -1 ... pardon

    ale mně to funguje s for smyčkou..

    jeden soubor to ale rozepisuje po slovech, a nevím proč má kolem názvu jednoduché uvozovky, takže universální to není..

    jinak je snadnější cesta files_in_dirs=(dir/* other_dir/*), ale to mi taky nefunguje na tom jednom souboru, taky to láme jéno na slova..

    M

    Řešení 1× (gsnak (tazatel))
    k3dAR avatar 24.10.2022 13:57 k3dAR | skóre: 63
    Rozbalit Rozbalit vše Re: bash pole - ako pridat polozku do pola z while cyklu?
    1. nedavej while za pipe, ale dodej mu to primo, jednak nastavi do promene, druhak poresi mezery
    2. u for smycky dej pole do uvozovek tim to nerozseka podle mezer, ale podle hodnot pole
    myArray=("cat" "dog" "mouse" "frog")
    A=("a" "b" "c")
    A+=("d")
    
    while read i; do
        A+=( "$i" );
        echo $i
    done < <(ls *.mp3 | sort -R)
    
    for i in "${A[@]}"; do
        echo "--- $i"
    done
    
    porad nemam telo, ale uz mam hlavu... nobody
    24.10.2022 14:38 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
    Rozbalit Rozbalit vše Re: bash pole - ako pridat polozku do pola z while cyklu?
    Tohle funguje i s tím jedním souborem co má kolem názvu apostofy ... M
    24.10.2022 18:16 gsnak | skóre: 22 | blog: gsnak
    Rozbalit Rozbalit vše Re: bash pole - ako pridat polozku do pola z while cyklu?
    Nakoniec som pouzil toto:
    #!/bin/bash
    clear
    A=()
    while read i; do
        A+=( "$i" );
    done < <(ls *.mp3 | sort -R)
    for i in "${A[@]}"; do
        echo "$i"
        mplayer -really-quiet "$i" 2>/dev/null
    done
    Čo Rys, to vrah!
    Řešení 1× (Gréta)
    24.10.2022 15:17 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: bash pole - ako pridat polozku do pola z while cyklu?

    while není „podprogram“. (Existuje taky „nadprogram“?) Problém není while, nýbrž dýmka. Bez dýmky se dá z while přistupovat k proměnným.

    Mimochodem: Nikdy neparsuj výstup z ls.

    mp3s=()
    while IFS= read -r mp3; do
      mp3s+=("$mp3")
    done < <(for mp3 in *.mp3; do
               printf '%s\n' "$mp3"
             done | shuf)
    for i in "${!mp3s[@]}"; do
      printf '%u --- %s\n' "$i" "${mp3s[i]}"
    done
    
    24.10.2022 18:05 gsnak | skóre: 22 | blog: gsnak
    Rozbalit Rozbalit vše Re: bash pole - ako pridat polozku do pola z while cyklu?
    ./a.sh: line 4: syntax error near unexpected token `('
    ./a.sh: line 4: `done << (for mp3 in *.mp3; do'
    GNU bash, version 5.1.16(1)
    Čo Rys, to vrah!
    24.10.2022 18:43 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: bash pole - ako pridat polozku do pola z while cyklu?

    Kde přesně jsem napsal „<< (“? Nikde to v mém kódu nevidím.

    Doporučuji Copy&Paste; pomáhá to.

    xkucf03 avatar 24.10.2022 20:11 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: bash pole - ako pridat polozku do pola z while cyklu?

    Pokud nemáš k dipozici lepší formát, tak bych ty prvky oddělil nulovým bajtem:

    while read -d '' i; do A+=("$i"); done < <(find -maxdepth 1 -type f -name '*.mp3' -print0 | sort -zR)

    Protože v názvu souboru může být víceméně libovolná změť bajtů kromě nulového bajtu (mj. aby to mohl být céčkovský řetězec) a lomítka (protože to je oddělovač v cestě k souboru). Tzn. kromě mezer, uvozovek a apostrofů tam můžou být i znaky konce řádku. Což dokáže zavařit např. i bash-completion:

    $ touch "ko                         
    kos"
    $ ls -1
    'ko'$'\n''kos'
    $ rm ko<TAB>
    ko   kos  
    
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    24.10.2022 23:42 tom
    Rozbalit Rozbalit vše Re: bash pole - ako pridat polozku do pola z while cyklu?
    Pouzitim escape sekvenci v nazvu souboru jde docilit mnohem zabavnejsiho chovani ruznych programu nez s obycejnym \n

    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.