Portál AbcLinuxu, 10. května 2025 01:12

Dotaz: Funkce v BASH

19.3.2006 01:28 © | skóre: 37 | blog: escaped
Funkce v BASH
Přečteno: 441×
Odpovědět | Admin
Ahoj.

Dokazal by nekdo za pouziti ciste prostredku BASHe napsat funkci, ktera by z nejakeho vzorku dat, napr.:
SLOVA="sport hash hush spool hurry hill speak spoke spoken guru gravity"
podle sveho prvniho parametru, napr.:
ta_funkce "hu"
vypsala:
hush hurry hurricane
Pri parametru "sp" by vypsala sport speak spoke spoken, pri parametru "hur" by vypsala hush hurry hurricane, pri parametru "spor" by vypsala jen sport atd?

Diky za napady.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.3.2006 01:31 © | skóre: 37 | blog: escaped
Rozbalit Rozbalit vše Re: Funkce v BASH
Odpovědět | | Sbalit | Link | Blokovat | Admin
OPRAVA: pri paramertu "hur" nema samosebou vypsat to hush, snad je to jasne... a do SLOVA pridejte jeste to slovo hurricane. :-D Trosku jsem to popletl. Snad je jasne, co by ta fce mela delat...
19.3.2006 01:42 Libor Klepac | skóre: 45 | Mýto
Rozbalit Rozbalit vše Re: Funkce v BASH
Odpovědět | | Sbalit | Link | Blokovat | Admin
nejak takto? ...teda neni to fce, ted zase nevim jak je psat ;)
SLOVA=" sport hash hush spool hurry hill speak spoke spoken guru gravity"

for word in $SLOVA; do
        TMP=${word#$1}
        [ "$TMP" != "$word" ] && echo $word
done

Urine should only be green if you're Mr. Spock.
19.3.2006 01:43 Libor Klepac | skóre: 45 | Mýto
Rozbalit Rozbalit vše Re: Funkce v BASH
mimochodem, nemam nahodou tvuj podpis na jistem formulari, ktery jsem take musel podepsat, abych dostal jistou magnetickou kartu? ;)
Urine should only be green if you're Mr. Spock.
19.3.2006 01:50 © | skóre: 37 | blog: escaped
Rozbalit Rozbalit vše Re: Funkce v BASH
Mozne je vsechno. Nektere veci jsou treba ve hvezdach, jine treba ne. Zalezi na tom? IMHO ne. (Muj sklon k dadaistickym prupovidkam je tu vcelku znam, tak se nediv!) :-D
19.3.2006 01:58 Libor Klepac | skóre: 45 | Mýto
Rozbalit Rozbalit vše Re: Funkce v BASH
nezalezi na tom, jenom jsem si toho vsiml, kdyz jsem se asi po mesici podival, co jsem to vlastne podepsal ;)
Urine should only be green if you're Mr. Spock.
19.3.2006 02:43 © | skóre: 37 | blog: escaped
Rozbalit Rozbalit vše Re: Funkce v BASH
Tohle je zde ovsem silne off-topic! ;-)
19.3.2006 01:53 © | skóre: 37 | blog: escaped
Rozbalit Rozbalit vše Re: Funkce v BASH
Perfektni. Takto elegantne bych to asi neporesil. DIK!
20.3.2006 11:44 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Funkce v BASH
Odpovědět | | Sbalit | Link | Blokovat | Admin
ta_funkce() {
  for i in $SLOVA
  do
    [[ "$i" == "$1"* ]] && echo $i
  done
}
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
22.6.2009 16:32 downey
Rozbalit Rozbalit vše Re: Funkce v BASH

ahoj, je to tu uz davno, ale mal by som dotaz

vysvetli mi niekto, preco su v cykle dve hranate zatvorky? :)

                   [[ "$i" == "$1"* ]] && echo $i

rozumiem, ze jedna z nich je prikaz test, ale neviem, preco je tam ta druha (resp. prva)

22.6.2009 17:25 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Funkce v BASH

[ není to samé jako [[

$ help [
[: [ arg... ]
    This is a synonym for the "test" builtin, but the last
    argument must be a literal `]', to match the opening `['.
[[ ... ]]: [[ expression ]]
    Returns a status of 0 or 1 depending on the evaluation of the conditional
    expression EXPRESSION.  Expressions are composed of the same primaries used
    by the `test' builtin, and may be combined using the following operators

        ( EXPRESSION )  Returns the value of EXPRESSION
        ! EXPRESSION    True if EXPRESSION is false; else false
        EXPR1 && EXPR2  True if both EXPR1 and EXPR2 are true; else false
        EXPR1 || EXPR2  True if either EXPR1 or EXPR2 is true; else false

    When the `==' and `!=' operators are used, the string to the right of the
    operator is used as a pattern and pattern matching is performed.  The
    && and || operators do not evaluate EXPR2 if EXPR1 is sufficient to
    determine the expression's value.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
22.6.2009 17:33 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Funkce v BASH
No to už je ale fakt dávno, ale ne tak dávno jak dávno se používat [ v Bashi.

[[ je "taky test", ale je to takový modernější builtin od Bashe verze 2.02. Google "bash test construct", ale je fakt že jsem na to neviděl nikde moc příkladů. Podstatná je možnost používat známé operátory jako == != < > && || a pár dalších věcí, takže to není pro neznalé bashe tak kryptické jako nějaké x$x = x$y -o $z -eq 1
22.6.2009 17:58 downey
Rozbalit Rozbalit vše Re: Funkce v BASH

aha, takze figel je v tom, ze v [[ mozem pouzivat expressions a v [ ] nemozem? :)

neviem, ci je to uplne spravne prepisane, ale vlastne takto by to bolo bez [[ ?

 

echo "$SLOVA" > subor

cat subor | tr " " "\n" | echo `grep "^$1.*"`

22.6.2009 18:21 downey
Rozbalit Rozbalit vše Re: Funkce v BASH

neviem, ci som to dobre povedal, tak som to pochopil, ze napr ten zapis "$1"* nemoze byt v [ ] teda wildkardy sa mozu pouzit len v [[....

alebo opravte ma niekto, ak sa mylim

22.6.2009 18:55 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Funkce v BASH
asi jste to pochopil dobře, dá se do toho trochu nahlédnout:
$ set +v

$ [ "ahoj" = aho* ] && echo ok?
+ '[' ahoj = 'aho*' ']'

$ [[ "ahoj" == aho* ]] && echo ok?
+ [[ ahoj == aho* ]]
+ echo 'ok?'
ok?

$ set -v
ale nevím jestli to je k něčemu :) Od verze bash 3.? lze použít i [[ výraz =~ ^regexp$ ]]
22.6.2009 19:10 downey
Rozbalit Rozbalit vše Re: Funkce v BASH

dakujem :)

toto som potreboval vediet, to sa mi este zide  [[ výraz =~ ^regexp$ ]]

Založit nové vláknoNahoru

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

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.