Portál AbcLinuxu, 4. května 2025 13:44

BASH a práce s řetězci

Článek na thegeekstuff.com ukazuje, jak v BASHi pracovat s řetězci. Pokud ve svém skriptu chcete zjistit délku řetězce nebo například vyhledat a případně nahradit podřetězec, v článku najdete informace, jak toho docílit.

23.7.2010 10:21 | Tomáš Heger (geckon) | Zajímavý článek


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

Komentáře

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

Vložit další komentář

23.7.2010 11:05 Ja
Rozbalit Rozbalit vše Re: BASH a práce s řetězci
Odpovědět | Sbalit | Link | Blokovat | Admin
Tohle nechápu, to je tak těžké napsat "man bash" - mám pocit že je to tam popsané přehledněji a v kontextu - kdyby to byl překlad do češtiny (nebo jiného jazyka), chápal bych přínos pro lidi bez znalosti angličtiny, ale takhle?
23.7.2010 11:09 Jindřich Makovička | skóre: 17
Rozbalit Rozbalit vše Re: BASH a práce s řetězci
A hlavně existuje ABS Guide.
yac avatar 23.7.2010 21:42 yac | skóre: 8 | blog: srckbin | Ostrava
Rozbalit Rozbalit vše Re: BASH a práce s řetězci
Pokud o tom (o možnostech bashe a jeho relativně slušném manuálu) člověk neví, tak nemá důvod. Řekl bych, že by ten článek byl k něčemu, kdyby na konci úvodu bylo něco jako:

"Remember, all this and much more is in awesome bash manpages, so just type
man bash
and search what you need."
srck! Linux smrdí. Méně.
default avatar 23.7.2010 22:31 default | skóre: 22 | Madrid
Rozbalit Rozbalit vše Re: BASH a práce s řetězci
Problém bashího manuálu je, že ho člověk musí napřed celý přečíst, aby věděl, co v něm najde. Něco jako Oraclí dokumentace. :-)
23.7.2010 21:53 imploder | skóre: 11
Rozbalit Rozbalit vše Re: BASH a práce s řetězci
Mně ty manuálové stránky docela štvou, musím hádat man [co] mám zadat, není v tom jasný systém, někde manuál chybí nebo v něm skoro nic není a zbytek je v info (jak se ten bazmek krucinál ovládá) nebo někde ještě jinde. Obyčejná dokumentace v HTML nebo windowsovské helpy jsou mnohem přehlednější. Akorát to neběhá v těch předpotopních konzolích.
24.7.2010 00:03 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: BASH a práce s řetězci
Na citanie info bazmegu nainstaluj pinfo. Lynx-like motion rules.
If you hold a Unix shell up to your ear, you can you hear the C.
24.7.2010 13:01 imploder | skóre: 11
Rozbalit Rozbalit vše Re: BASH a práce s řetězci
Díky, pinfo je šikovná věc, ovládá se to a vypadá to normálně. To by se mělo dávat jako výchozí.
Jardík avatar 23.7.2010 11:33 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: BASH a práce s řetězci
Odpovědět | Sbalit | Link | Blokovat | Admin
Mě by potěšilo, kdyby se už lidi konečně naučili ty řetězce používat v různých skriptech pořádně - hlavně v configure skriptech pro software. To když to rozbalíte do adresáře s mezerou, tak to nefunguje. Nebo u kýblu SW to rovnou napíšou "nerozbalujte do adresáře s mezerou". Tady je vidět absolutní neschopnost. Sice jsem taky neschopný, ale alespoň nepředpokládám, že každý adresář neobsahuje mezeru.
Věřím v jednoho Boha.
default avatar 23.7.2010 12:41 default | skóre: 22 | Madrid
Rozbalit Rozbalit vše Re: BASH a práce s řetězci
Tohle neni zdaleka problém jen skriptů. Oracle s jeho SQL*Plus o tom ví své. :-)
23.7.2010 12:57 utx
Rozbalit Rozbalit vše Re: BASH a práce s řetězci
configure skripty jsou od toho, aby analyzovaly prostředí, na kterém běží. Takže se musí psát Bourne Shellu (nejlépe z roku 1978), a ještě se musíte vyhnout konstrukcím, které by na některé platformě vinou nějaké chyby nefungovaly.

Mezery do cest souborů při kompilaci bych se raději ani nepokoušel používat. Uvědomte si, že v tom stařičkém Bourne Shellu musíte napsat skript, který vám takové cesty korektně převede do Makefile (kompatibilního se všemi verzemi make anebo makrem přispůsobené detekovanému chování make) i do hlavičkového souboru.

A teď si uvědomte, že jednotlivé shelly jsou mezi sebou docela drsně nekompatibilní, dokonce i různé verze Bashe dávají na stejný výraz odlišné výsledky!

Příklad:
FUJ="a*b\\*c" ; echo ${FUJ//\\*/-hvězdička-}
Výstup: Bash 2, busybox:
a-hvězdička-b-\hvězdička-c
Výstup: Bash 3, Bash 4, zsh:
a*b-hvězdička-
Výstup: dash:
dash: Bad substitution
Výstup: ash:
Syntax error: Bad substitution
24.7.2010 08:52 komentator
Rozbalit Rozbalit vše Re: BASH a práce s řetězci
Preco to robit nejakym vacsinou nefunkcnym riesenim, ked tu mame sed? Co som skusal, tak ten funguje vsade rovnako, take sed -e 's/*/-hviezdicka-/g' by nemalo robit problem ziadnemu sedu a je kazdemu hned jasne, aky to da vysledok.
Stanislav Brabec avatar 24.7.2010 12:23 Stanislav Brabec | skóre: 45 | Praha
Rozbalit Rozbalit vše Re: BASH a práce s řetězci
Ani sed není přenositelný. Znak * je speciální znak a ve vašem výrazu to může znamenat i chybu: znaku * nepředchází výraz (\* by ale mohlo fungovat všude), \| může, ale nemusí fungovat, způsob, jak zapnout syntaxi pro rozšířené regulární výrazy, se také liší (-E, -r). Chování některých implementací se liší podle LANG. Stálo mne to docela dost práce, než jsem odladil několikařádkový sed program tak, aby fungoval v GNU-Linux, FreeBSD, Windows i Solarisu.

Navíc každé volání jednoduchého sedu znamená zpomalení skriptu (někdy i o několik řádů). Pokud je celý program v shellu, je lepší napsat i výraz v shellu.
23.7.2010 13:41 Aktuator
Rozbalit Rozbalit vše Re: BASH a práce s řetězci
Voni ty skripty jsou stejně jenom taková nedomrlá šmejďárna. Na normální nativní exáč to nemá.
23.7.2010 15:44 Mti. | skóre: 31 | blog: Mti
Rozbalit Rozbalit vše Re: BASH a práce s řetězci
To jako sardinky s otvirakem uvnitr?
Vidim harddisk mrzuty, jehoz hlava plotny se dotyka...
23.7.2010 15:35 Ondrej 'SanTiago' Zajicek
Rozbalit Rozbalit vše Re: BASH a práce s řetězci
Pokud nekdo strka mezeru do jmena adresare, dobre mu tak! :–)
23.7.2010 15:45 imploder | skóre: 11
Rozbalit Rozbalit vše Re: BASH a práce s řetězci
UNIX umožňuje používat v názvech souborů jakékoliv znaky kromě '/'. Prostě dám proměnnou do uvozovek a hotovo.
23.7.2010 18:42 l4m4
Rozbalit Rozbalit vše Re: BASH a práce s řetězci
Kromě / a NUL.

Nicméně postup prostě dám proměnnou do uvozovek funguje pouze v případě, kdy vím, že proměnná obsahuje jednu cestu a pouze tuto jednu cestu, což je většinou situace, kdy už byly skutečné problémy s expanzí vyřešeny a jsem de facto hotov...
23.7.2010 18:55 imploder | skóre: 11
Rozbalit Rozbalit vše Re: BASH a práce s řetězci
To už ale pak není problém shellu, ale toho, co parsuje obsah té proměnné, ne? (pokud jsou v ní cesty oddělené třeba dvojtečkou)
23.7.2010 18:55 Ondrej 'SanTiago' Zajicek
Rozbalit Rozbalit vše Re: BASH a práce s řetězci
To ze neco jde pouzivat jeste neznamena, ze to je rozumny napad. Jadro UNIXu to sice umoznuje, ale i zakladni shell a nastroje na to nejsou dobre prizusobene. Staci se podivat na standardni kombinaci find a xargs - ty si bez GNU extensions na jmenech obsahujicich newline vylamou zuby.
23.7.2010 18:58 imploder | skóre: 11
Rozbalit Rozbalit vše Re: BASH a práce s řetězci
Lepší by bylo to rovnou zakázat, ať to pak nefunguje pokaždé jinak.

Založit nové vláknoNahoru


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