Portál AbcLinuxu, 26. května 2024 04:34


Dotaz: Nefunkční script v shelu

8.11.2012 13:53 Ondrej
Nefunkční script v shelu
Přečteno: 210×
Odpovědět | Admin
Zdravím, poradí/opraví někdo proč je u obou výstupů absolutně stejný výsledek? Děkuji vám
IFS=$'|'
ARR=(" Lorem        ipsum   dolor sit am  et   |  Risus urna     convallis est et  ")
PAR=( ${ARR[0]} )
PAR0=${PAR[0]}
PAR1=$( echo ${PAR0[0]} )
echo $PAR0
echo $PAR1
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

8.11.2012 14:03 Kit
Rozbalit Rozbalit vše Re: Nefunkční script v shelu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Asi proto, že tam chybí uvozovky kolem proměnných.
8.11.2012 14:16 Ondrej
Rozbalit Rozbalit vše Re: Nefunkční script v shelu
:-D aspoň sis to spustil?

..nějaká jiná rada?
8.11.2012 14:19 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Nefunkční script v shelu
Odpovědět | | Sbalit | Link | Blokovat | Admin
A důvod proč by neměl být stejný je jaký?
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
8.11.2012 14:25 Ondrej
Rozbalit Rozbalit vše Re: Nefunkční script v shelu
Řádek 5, PAR1=$( echo ${PAR0[0]} ) by měl odstranit mezery, což neudělá.
8.11.2012 14:32 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Nefunkční script v shelu
Přestavil jste IFS.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
8.11.2012 14:35 Ondrej
Rozbalit Rozbalit vše Re: Nefunkční script v shelu
Teď moc (vůbec) nerozumím... Můžete to upřesnit? Dík
8.11.2012 14:44 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Nefunkční script v shelu
Jukněte pozorně:
#!/bin/bash

OLDIFS=$IFS
IFS='|'
ARR=(" Lorem        ipsum   dolor sit am  et   |  Risus urna     convallis est et  ")
PAR=( ${ARR[0]} )
PAR0=${PAR[0]}
#remove next line change output
IFS=$OLDIFS
PAR1=$( echo ${PAR0[0]} )
IFS='|'
echo $PAR0
echo "\"$PAR0"
echo $PAR1
echo "\"$PAR1"
echo '----'
IFS=$OLDIFS
echo $PAR0
echo "\"$PAR0"
echo $PAR1
echo "\"$PAR1"
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
8.11.2012 15:09 Ondrej
Rozbalit Rozbalit vše Re: Nefunkční script v shelu
Hm, tak toto je už fakt ale moc... kašlu na celý programování v bashi. Můžete mi ale ještě prozradit jednu věc? Když nainstaluji nějaký server, přihlásím se poprvé do systému... co je nastaveno v proměnné $IFS? Dík

Jinak mnohokeré díky za vyčerpávající příklad!
8.11.2012 15:52 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Nefunkční script v shelu
To jsem nechtěl způsobit, chtěl jsem jen ukázat, že na některých systémových proměnných jsou závislé některé funkce a zrovna od IFS se odvíjí spousta věcí (byť je to furt totéž, jen s různými důsledky), stejně tak například přestavení proměnné LANG může generovat jiný výstup z různých příkazů.
Nevím jestli je to nějak definované, ale <space>, <tab>, <newline>, zobrazit si to můžete třeba pomocí echo -n "$IFS" | od -abc.
Ale tak jak to bylo použito, se to přestavujete jen pro daný vykonávaný skript ne pro celý systém.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
rADOn avatar 8.11.2012 16:42 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Nefunkční script v shelu
IFS neni promenna systemu ale bashe. Defaultni hodnota jsou bily znaky (mezera, odradek, tabulator). Jinak s "programovanim" v shellu se to ma stejne jako s programovani ve vetsine vyssich jazyku – umet syntaxi je 1% uspechu, 99% je znalost prostredi. Napriklad, vedet co je lepsi delat v sedu a awku :-)
"2^24 comments ought to be enough for anyone" -- CmdrTaco
8.11.2012 15:11 Ondrej
Rozbalit Rozbalit vše Re: Nefunkční script v shelu
Ještě jedna věc, není tohle náhodou špatně?
IFS='|'
nemá to být náhodou takto?
IFS=$'|'
8.11.2012 15:32 chrono
Rozbalit Rozbalit vše Re: Nefunkční script v shelu
Keď ide o normálny znak, stačí ten tvar '|'. Ak by sa do IFS pridával napr. znak pre tabulátor, tak by sa tam použilo $'\t'.
8.11.2012 15:55 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Nefunkční script v shelu
Já mám stejně ale oblíbené:
IFS='
'
:-)
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†

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.