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í
×
    26.12. 18:44 | Komunita

    Od soboty do úterý probíhá v Hamburku konference 39C3 (Chaos Communication Congress) věnovaná také počítačové bezpečnosti nebo hardwaru. Program (jiná verze) slibuje řadu zajímavých přednášek. Streamy a záznamy budou k dispozici na media.ccc.de.

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

    Byl představen nový Xserver Phoenix, kompletně od nuly vyvíjený v programovacím jazyce Zig. Projekt Phoenix si klade za cíl být moderní alternativou k X.Org serveru.

    🇨🇽 | Komentářů: 7
    26.12. 13:11 | Nová verze

    XLibre Xserver byl 21. prosince vydán ve verzi 25.1.0, 'winter solstice release'. Od založení tohoto forku X.Org serveru se jedná o vůbec první novou minor verzi (inkrementovalo se to druhé číslo v číselném kódu verze).

    🇨🇽 | Komentářů: 0
    26.12. 03:33 | Nová verze

    Wayback byl vydán ve verzi 0.3. Wayback je "tak akorát Waylandu, aby fungoval Xwayland". Jedná se o kompatibilní vrstvu umožňující běh plnohodnotných X11 desktopových prostředí s využitím komponent z Waylandu. Cílem je nakonec nahradit klasický server X.Org, a tím snížit zátěž údržby aplikací X11.

    Ladislav Hagara | Komentářů: 0
    25.12. 14:44 | Nová verze

    Byla vydána verze 4.0.0 programovacího jazyka Ruby (Wikipedie). S Ruby Box a ZJIT. Ruby lze vyzkoušet na webové stránce TryRuby. U příležitosti 30. narozenin, první veřejná verze Ruby 0.95 byla oznámena 21. prosince 1995, proběhl redesign webových stránek.

    Ladislav Hagara | Komentářů: 0
    24.12. 02:11 | Komunita

    Všem čtenářkám a čtenářům AbcLinuxu krásné Vánoce.

    Ladislav Hagara | Komentářů: 30
    24.12. 02:00 | Nová verze

    Byla vydána nová verze 7.0 linuxové distribuce Parrot OS (Wikipedie). S kódovým názvem Echo. Jedná se o linuxovou distribuci založenou na Debianu a zaměřenou na penetrační testování, digitální forenzní analýzu, reverzní inženýrství, hacking, anonymitu nebo kryptografii. Přehled novinek v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    23.12. 18:33 | Nová verze

    Vývojáři postmarketOS vydali verzi 25.12 tohoto před osmi lety představeného operačního systému pro chytré telefony vycházejícího z optimalizovaného a nakonfigurovaného Alpine Linuxu s vlastními balíčky. Přehled novinek v příspěvku na blogu. Na výběr jsou 4 uživatelská rozhraní: GNOME Shell on Mobile, KDE Plasma Mobile, Phosh a Sxmo.

    Ladislav Hagara | Komentářů: 0
    23.12. 13:55 | Nová verze

    Byla vydána nová verze 0.41.0 multimediálního přehrávače mpv (Wikipedie) vycházejícího z přehrávačů MPlayer a mplayer2. Přehled novinek, změn a oprav na GitHubu. Požadován je FFmpeg 6.1 nebo novější a také libplacebo 6.338.2 nebo novější.

    Ladislav Hagara | Komentářů: 0
    23.12. 12:44 | Nová verze

    Byla vydána nová verze 5.5 (novinky) skriptovacího jazyka Lua (Wikipedie). Po pěti a půl letech od vydání verze 5.4.

    Ladislav Hagara | Komentářů: 0
    Kdo vám letos nadělí dárek?
     (35%)
     (1%)
     (20%)
     (1%)
     (1%)
     (1%)
     (12%)
     (13%)
     (15%)
    Celkem 158 hlasů
     Komentářů: 18, poslední 24.12. 15:29
    Rozcestník

    Dotaz: Předávání parametrů v uvozovkách

    7.4.2007 21:39 Robert Krátký | skóre: 94 | blog: Robertův bloček
    Předávání parametrů v uvozovkách
    Přečteno: 221×
    Potřebuji programu předávat množství parametrů v uvozovkách (jednotlivé parametry obsahují mezery). Tedy něco takového:
    $ program "aaa aaa" "bbb bbb"
    Parametry by však měly být výstupem jiného příkazu:
    $ program `jiný_program`
    Řešení jsem se snažil hledat tady v archivu a na http://www.tldp.org/LDP/abs/html/quoting.html -- patrně přehlížím nějakou drobnost...

    Příklad:
    $ list="\"aaa aaa\" \"bbb bbb\""
    $ echo $list
    "aaa aaa" "bbb bbb"
    $ funkce () { echo 1: $1; echo 2: $2; echo 3: $3; echo 4: $4; }
    $ funkce "aaa aaa" "bbb bbb" # tohle funguje
    1: aaa aaa
    2: bbb bbb
    3:
    4:
    $ funkce `echo $list` # tohle nefunguje
    1: "aaa
    2: aaa"
    3: "bbb
    4: bbb"
    Zkoušel jsem to escapovat o ozávorkovávat horem dolem, ale nic nefungovalo. Mohl byste mě někdo postrčit správným směrem? Díky.

    Odpovědi

    7.4.2007 21:58 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách

    Jak se snažím použití eval vyhýbat, našel jsem jen tohle:

      eval funkce `echo $list`
    
    7.4.2007 22:32 Robert Krátký | skóre: 94 | blog: Robertův bloček
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách
    Díky. Kdybych už z toho nebyl zblblý, tak by mi jako odpověď posloužil ten můj vlastní příklad... Zkoušel jsem totiž už předtím eval použít, ale cpal jsem to přímo k programu, jehož výstupem jsou ty parametry:
    $ program `eval jiný_program`
    což samozřejmě nefungovalo. Až teď mi - díky tvé odpovědi - došlo, že je nutné to provést takhle:
    $ list=`jiný_program`; eval program `echo $list`
    7.4.2007 22:36 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách

    IMHO by mělo stačit

      eval program `jiný_program`
    
    7.4.2007 22:51 Robert Krátký | skóre: 94 | blog: Robertův bloček
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách
    Jasně. Napsal jsem to tak, jen aby to navazovalo na ten uvedený příklad.
    7.4.2007 22:06 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách
    Pokud můžeš změnit výstup programu, které generují parametry, pak bych v tom skriptu pouze přenastavil proměnnou IFS na něco jiného, co chceš použít jako oddělovač
    IFS=';'
    list='aaa aaa;bbb bbb'
    funkce () { echo 1: $1; echo 2: $2; echo 3: $3; echo 4: $4; }
    
    funkce `echo $list`
    1: aaa aaa bbb bbb
    2:
    3:
    4:
    
    When your hammer is C++, everything begins to look like a thumb.
    7.4.2007 22:48 Robert Krátký | skóre: 94 | blog: Robertův bloček
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách
    Já potřebuji, aby to bylo bráno jako jednotlivé parametry. Tj. nikoliv jeden velký (aaa aaa bbb bbb), ale dva samostatné (aaa aaa, bbb bbb).

    Každopádně eval funguje :-)
    Fuky avatar 8.4.2007 00:43 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách

    Každopádně tohle taky funguje ;-) Jen je potřeba vypustit zbytečné předávání výstupu echo.

    $ IFS=";"
    $ list="aaa aaa;bbb bbb"
    $ funkce () { echo 1: $1; echo 2: $2; echo 3: $3; echo 4: $4; }
    $ funkce $list
    1: aaa aaa
    2: bbb bbb
    3:
    4:
    

    8.4.2007 02:06 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách
    Vzhledem k tomu, jak zněl původní dotaz, je tento postřeh trochu mimo…
    Fuky avatar 8.4.2007 13:39 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách

    Asi jsi nepochopil co je IFS. Pokusím se Ti to tedy vysvětlit na příkladu ;-)

    $ cat skript.sh
    #!/bin/bash
    
    echo $@
    echo
    echo "1: $1"
    echo "2: $2"
    echo "3: $3"
    echo "4: $4"
    $ IFS=";"
    $ ./out.sh
    aaa bbb;ccc ddd
    $ ./skript.sh $(./out.sh)
    aaa bbb ccc ddd
    
    1: aaa bbb
    2: ccc ddd
    3:
    4:
    

    Stále si stojíš za tím co jsi řekl?

    8.4.2007 13:46 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách
    Spíš jste vy nepochopil, že nejde o to, jak předat příkazu parametry, které jsou uloženy v proměnné, ale jak příkazu předat parametry, které generuje jiný příkaz, a že 'echo $list' byl pouze příkladem takového příkazu. Takže v okamžiku, kdy jste "vypustil zbytečné předávání výstupu echo", se vaše odpověď přestala týkat dotazu.
    Fuky avatar 8.4.2007 14:20 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách

    Jistě jsi si všiml, že v příkladu pro Tebe příkazu předávám parametry, které generuje jiný příkaz, takže co Tě trápí? BTW: A z dotazu je zřejmé, že výstup toho "jiného příkazu" lze modifikovat, tudíž není problém doplnit ";" či jiný oddělovač. Už je Ti to jasné?

    8.4.2007 14:27 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách

    Mně to bylo jasné od začátku. Vy si ovšem asi neuvědomujete, že když píšu svou reakci, reaguji na příspěvek, ke kterému tu reakci píšu. Ne na ty, které napíšete teprve jedenáct hodin poté… Takže když napíšete nesmyslný příspěvek, odpovím vám, že je to nesmyslný příspěvek, a nezabývám se možností, že to možná o půl dne později opravíte (což byste navíc nejspíš neudělal, kdybych vás na nesmyslnost původního příspěvku neupozornil).

    Fuky avatar 8.4.2007 15:52 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách

    Stále to nechápeš, to mě mrzí. Reagoval jsem na Robertův příspěvek, abych ho upozornil, že IFS také řeší jeho problém. Myslím, že všichni to pochopili, ale Ty jsi rozjel toto vlákno svým nesmyslným příspěvkem. Opravdu Ti to není jasné nebo jen nechceš uznat vlastní chybu? Zkus se zamyslet, sáhnout do svého svědomí a uznat, že jsi přestřelil.

    Oba mé příklady jsou v principu to samé, i přesto je podle Tebe ten první nesmysl ;-)

    8.4.2007 16:06 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách
    Reagoval jsem na Robertův příspěvek, abych ho upozornil, že IFS také řeší jeho problém.

    Jenže to, co jste napsal, ho nejen neřešilo, ale bylo to úplně od věci. Řešilo ho - možná* - teprve to, co jste napsal až dnes odpoledne. Proto jsem na to reagoval tak, jak jsem reagoval, a chybu byste měl uznat vy. Já nikdy netvrdil, že IFS použít nelze (opět s níže uvedenou poznámkou); jen to, že co jste napsal v 00:43 je z pohledu řešeného problému naprosto od věci. A na tom trvám; že jste o jedenáct hodin později dospěl k jinému řešení, které už (jakž takž) funguje, na tom nic nezmění.


    * - řešení to je pouze za předpokladu, že si může vybrat jeden konkrétní znak, který se určitě v použitých hodnotách nevyskytne; a to velmi často není pravda

    Fuky avatar 8.4.2007 19:48 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách

    S poznámkou pod čarou samozřejmě souhlasím, ale i ta má "řešení" ;-)

    $ cat out.sh
    echo '"aaa;bbb";"ccc;ddd"'
    $ IFS=";"
    $ eval ./skript.sh $(./out.sh)
    aaa bbb ccc ddd
    
    1: aaa bbb
    2: ccc ddd
    3:
    4:
    

    Jinak si samozřejmě stále stojím za tím co jsem napsal a na tom taky trvám :-D

    8.4.2007 20:50 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách
    Zkuste si tento konkrétní příklad porovnat s řešením z mého prvního příspěvku a zamyslet se nad tím, zda tu použití středníku a proměnné IFS není poněkud samoúčelné…
    Fuky avatar 8.4.2007 21:08 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách

    No to si snad ze mě děláš srandu "řešení" ;-), na to jsem právě narážel, že tak jako tak se v této situace neobejdu bez Tvého řešení a bylo by absurdní použít IFS...

    BTW: Pochopil jsi alespoň Ty o co mi celou dobu jde? Děkuji za odpověď. Howg!

    8.4.2007 21:14 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách
    Ale jistě, pochopil. V 00:43 jste z nepozornosti napsal příspěvek, který byl zcela mimo mísu, po následném upozornění jste sice napsal opravu, ale stále odmítáte přiznat, že původní příspěvek byl (vzhledem k dotazu) nesmyslný a usilovně (leč nepříliš úspěšně) se to snažíte okecat.
    Fuky avatar 8.4.2007 22:47 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách

    <cite> Spíš jste vy nepochopil, že nejde o to, jak předat příkazu parametry, které jsou uloženy v proměnné, ale jak příkazu předat parametry, které generuje jiný příkaz, a že 'echo $list' byl pouze příkladem takového příkazu. Takže v okamžiku, kdy jste "vypustil zbytečné předávání výstupu echo", se vaše odpověď přestala týkat dotazu. <cite>

    No řekl bych, že okecat se to snažíš Ty, tak to zkusím ještě jednou a opravdu naposledy. Zásadní chyba je právě v tom, že echo $list je špatným příkladem příkazu, který něco generuje. Mám pro to dva argumenty a) jak jsem psal níže, IFS=";" se aplikuje dvakrát b) proč to kompikovat a nepředat rovnou výstup programu. $(./gen_list.sh) dělá pro naše testovací účely úplně to samé jako $list:

    $ export list="aaa bbb;ccc ddd"
    $ cat gen_list.sh
    echo $list
    $ IFS=";"
    $ ./skript.sh $list
    $ ./skript.sh $(./gen_list.sh)

    Které z těchto řešení Ti přijde rychlejší na otestování? Mě přijde rychlejší použít rovnou $list.

    To je jako kdyby jsi tvrdil, že následující příklad je mimo mísu, přitom je to Tvé řešení, ale v bleděmodrém:

    $ list='"aaa bbb" "ccc ddd"'
    $ eval ./skript.sh $list

    Závěr: již můj první příspěvek se týkal dotazu ;-)

    8.4.2007 21:16 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách
    A tím už také končím, protože všichni ostatní už očividně pochopili, v čem je problém, a na tom, zda si to budete ochoten přiznat i vy, argumenty zjevně nic nezmění.
    8.4.2007 16:53 Robert Krátký | skóre: 94 | blog: Robertův bloček
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách
    Oba mé příklady jsou v principu to samé, i přesto je podle Tebe ten první nesmysl ;-)
    Michal nepsal, že je to nesmysl, nebo že by (za určitých okolností) nešlo použít řešení pomocí IFS. Napsal, že vzhledem k zadání je to "mimo". To proto, že jsi k předání těch parametrů nevyužil příkaz ale proměnnou (viz "je potřeba vypustit zbytečné předávání výstupu echo") -- neboli i když je, jak jsi o příspěvek dále ukázal, možné to pomocí IFS vyřešit i bez proměnné, tj. spuštěním příkazu, tak "vypuštění echo" bylo "mimo". A už se nehádejte :-). Díky za pomoc.
    Fuky avatar 8.4.2007 19:30 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách

    Michal napsal, že je to nesmysl ;-)

    <cite> Takže když napíšete nesmyslný příspěvek, odpovím vám, že je to nesmyslný příspěvek, a nezabývám se možností, že to možná o půl dne později opravíte (což byste navíc nejspíš neudělal, kdybych vás na nesmyslnost původního příspěvku neupozornil). </cite>

    No a právě o to, že vypuštění echo bylo, podle vás, mimo mi jde.

    $ IFS=";"
    $ ./skript.sh $list
    $ ./skript.sh $(./out.sh)
    

    V obou případech se IFS=";" aplikoval jednou na řetězec "aaa bbb;ccc ddd", takže se snad můžeme shodnout, že oba příklady jsou vlastně synonyma.

    $ IFS=";"
    $ ./skript.sh $(echo $list)
    

    A v tomto případě se IFS=";" aplikovalo jednou na řetězec "aaa bbb;ccc ddd" a podruhé na řetězec "aaa bbb ccc ddd".

    Teď už si doufám všichni rozumíme?

    Však my se nehádáme, my si jen vyměňujeme názory, naštěstí dost daleko od sebe, takže stíhám vychladnout :-D

    8.4.2007 20:04 Robert Krátký | skóre: 94 | blog: Robertův bloček
    Rozbalit Rozbalit vše Re: Předávání parametrů v uvozovkách
    Teď už si doufám všichni rozumíme?
    Ne. Abych řekl pravdu, tak netuším, o čem v tom druhém příkladu mluvíš. Ale to nevadí... Už jsem vyzkoušel všechna zde prezentovaná řešení a už mi to celý den funguje k plné spokojenosti, takže to nechme být...

    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.