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í
×
    dnes 11:44 | Komunita

    Hříčka xsnow, která na ploše spustí sněžení, je protestware. Pokud jste v Rusku (LANG=ru), zobrazuje ukrajinské vlajky.

    Ladislav Hagara | Komentářů: 8
    dnes 11:11 | Nová verze

    UBports, nadace a komunita kolem Ubuntu pro telefony a tablety Ubuntu Touch, vydala beta verzi Ubuntu Touch 24.04-2.0. Nová verze již počítá s výřezy pro fotoaparát (notch) a zaoblenými rohy displeje. Webový prohlížeče Morph přešel z Chromia 87 na Chromium 134. Do shellu Lomiri byl přidán editor snímků obrazovky.

    Ladislav Hagara | Komentářů: 0
    dnes 04:22 | Komunita

    V Praze probíhá Flock 2026, tj. konference pro přispěvatele a příznivce Fedory. Přednášky lze sledovat také na YouTube.

    Ladislav Hagara | Komentářů: 0
    dnes 04:00 | Nová verze

    Node-RED (Wikipedie, GitHub), webová aplikace postavená na Node.js pro vizuální programování a propojování hardwarových zařízení, API a online služeb, byl vydán ve verzi 5.0. Přehled novinek v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    dnes 02:00 | Nová verze

    Byla vydána nová verze 3.27.0 FreeRDP, tj. svobodné implementace protokolu RDP (Remote Desktop Protocol). Opraveno bylo 5 zranitelností.

    Ladislav Hagara | Komentářů: 0
    včera 23:11 | Komunita

    Řídící výbor GCC schválil záměr do GCC začlenit backend WebAssembly.

    Ladislav Hagara | Komentářů: 2
    14.6. 21:00 | Nová verze

    Po 9 týdnech vývoje od vydání Linuxu 7.0 oznámil Linus Torvalds vydání Linuxu 7.1. Přehled novinek a vylepšení na LWN.net: první a druhá polovina začleňovacího okna a časem také na Linux Kernel Newbies.

    Ladislav Hagara | Komentářů: 0
    14.6. 13:33 | Zajímavý software

    Cheat Engine (Wikipedie) je s verzí 7.7 k dispozici už také pro Linux. Jedná se o proprietární skener/debugger paměti používaný především k cheatování v počítačových hrách.

    Ladislav Hagara | Komentářů: 0
    13.6. 15:22 | IT novinky

    Vláda USA nařídila společnosti Anthropic pozastavit přístup k modelům Fable 5 a Mythos 5 pro všechny cizince, včetně zaměstnanců Anthropicu.

    Ladislav Hagara | Komentářů: 8
    13.6. 02:22 | Nová verze

    Společnost Murena představila (YouTube) novou verzi 4.0 mobilního operačního systému /e/OS (Wikipedie) založeného na Androidu a LineageOS bez aplikací a služeb od Googlu.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (8%)
     (2%)
     (16%)
     (31%)
     (3%)
     (6%)
     (3%)
     (16%)
     (26%)
    Celkem 1916 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník


    Dotaz: Seznam/pole (nebo tak něco) v sh

    Jardík avatar 1.4.2014 16:10 Jardík | skóre: 40 | blog: jarda_bloguje
    Seznam/pole (nebo tak něco) v sh
    Přečteno: 259×
    Potřeboval bych vytvořit něco jako seznam či pole v sh (bude to busyboxí ash nebo dash, bash ne).

    Např. když mám skript, který vypisuje argumenty
    for i in $*; do
      echo "$i"
    done
    
    A zavolám ho:
    $ myscript meow meow2 "meow with space"
    meow
    meow2
    meow
    with
    space
    
    Stejně je to když použiju $@ místo $*. Když to ale dám do uvozovek jako "$*" a "$@", tak dostávám:
    # for i in "$*"; do echo "$i"; done
    meow meow2 meow with space
    
    # for i in "$@"; do echo "$i"; done
    meow
    meow2
    meow with space
    
    Poslední příklad mi tedy dává, co potřebuju, v případě argumentů předaných skriptu. Co teď ale potřebuju je něco podobného s proměnnou místo argumentů. Následující nefunguje
    myvar="meow meow2 \"meow with space\""
    
    # for i in ${myvar}; do echo "$i"; done
    meow
    meow2
    "meow
    with
    space"
    
    # for i in "${myvar}"; do echo "$i"; done
    meow meow2 "meow with space"
    
    Co potřebuju je výstup
    meow
    meow2
    meow with space
    
    Věřím v jednoho Boha.

    Odpovědi

    1.4.2014 16:46 potato
    Rozbalit Rozbalit vše Re: Seznam/pole (nebo tak něco) v sh
    Posixový shell nemá pole (kromě argumentů) ani nepřímé reference. Viděl bych tyto možnosti:

    (a) Využít toho, že je k disposici jen jedno pole, ale není globální a formulovat celý kód tak, že se pole předávají dokola jako argumenty funkcí.

    (b) Narvat to do jedné proměnné, použít delimitery a pokaždé dělat explicitní split-unescape-escape-join cyklus.

    (c) Zatnout zuby a použít eval.

    (d) Ukládat data jinak (do souborů, etc.).

    (e) Nepsat RDBMS v dashi...
    Jardík avatar 1.4.2014 16:48 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Seznam/pole (nebo tak něco) v sh
    Tek jsem se dopracoval zatím k něčemu takému:
    # embeded newline
    myvar="meow
    meow2
    meow with space"
    
    SAVEIFS="${IFS}"
    
    # split on newline
    IFS=$'\n'
    a=1
    
    for i in ${myvar}; do
      echo "arg${a}: ${i}"
      a=$((a+1))
    done
    
    IFS="${SAVEIFS}"
    
    Tedy mám "jakési" pole, kde jsou položky rozděleni znakem nového řádku. Problém je, že znak nového řádku se může vyskytovat třeba ve jménu souboru (asi zřídka, ale může), takže by to chtělo jiný oddělovač. Bohužel nula (tj. jediný znak, který není v cestě souboru) jaksi v sh nefunguje :-(
    Věřím v jednoho Boha.
    Jardík avatar 1.4.2014 19:36 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Seznam/pole (nebo tak něco) v sh
    Hmm, tak na webu ubuntu tvrdí, že $'\n' je bashismus. V busyboxím ash mi to funguje, ale chtěl bych to mít portabilní (česky?). Zkusil jsem tedy jejich IFS="$(printf '\n')", jenže to mi novou řádku ukradne a do proměnné neuloží, ačkoliv samotný printf '\n' ji produkuje.
    Věřím v jednoho Boha.
    1.4.2014 20:33 potato
    Rozbalit Rozbalit vše Re: Seznam/pole (nebo tak něco) v sh
    Protože `` a $() pojídají koncové prázdné řádky. Nejspíš je to POSIX a tradice, nechce se mi to teď dohledávat. Získat z command substitution pouze konec řádku tedy nejde, musíš za něj v printf něco přidat, aby nebyl odstraněn, pak to zase zlikvidovat.

    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.