Portál AbcLinuxu, 12. května 2025 06:09

Dotaz: Bash expanzia

29.1.2010 20:02 Patrik Uhrak | skóre: 31 | blog: pato
Bash expanzia
Přečteno: 223×
Odpovědět | Admin

Zdravim, vytvoril som si skript, ktory funguje, ale da sa to aj efektivnejsie. Aspon myslim. Nie je podstatne, aky skript ani on samotny, ide skor o toto:

 

Ak zapisem

echo {1..100}

vysledkom budu vsetky cisla od 1 do 100 vratane.

 

Ak by som ale zapisal takto

A=1; B=100; echo {"$A".."$B"};

vysledok bude takyto {1..100}

 

A nie a nie sa dopratat, ci je to mozne a ak ano, kde je chyba a ako ma spravne vyzerat zapis. Nechcem, aby si niekto myslel, ze som sa nesnazil, ale po dvoch dnoch patrania, skusania roznych variant zapisu uz neviem, kde hladat. Takze vopred dakujem za odpoved.


Řešení dotazu:


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

Odpovědi

29.1.2010 20:20 12345 | skóre: 41 | blog:
Rozbalit Rozbalit vše Re: Bash expanzia
Odpovědět | | Sbalit | Link | Blokovat | Admin

Viz manuál:

Bash does not apply any syntactic interpretation to the context of the expansion or the text between the braces.

Jde to nahradit například takto:

seq -s ' ' $A $B
29.1.2010 21:01 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Bash expanzia

Pekne vymyslene. Funkcne a robi to, co som ziadal. Ale nie celkom som si bol vedomy, ako je dolezite, aby som to obsirnejsie vysvetlil. Niecim takymto:

echo {"$A".."$B"}.png

som chcel dostat zoradeny vypis obrazkov pre convert, lebo postupnost je dolezita v tomto pripade. Lenze, toto nefunguje, ako si mi ukazal. Zatial to mam takto, co aj funguje, ale podla mna to je sice funkcne no nie najspravnejsie riesenie. Tu je ta cast :

 

for i in `seq "$START_POS" "$END_POS"

do

ARRAY_SCRNSHOTS["$i"]="$i".png

done

convert ${ARRAY_SCRNSHOTS[*]} -append "$COUNT"_down.png

let COUNT++

 

Napada aj ine riesenie ? Alebo je to v poriadku, najma ked je to funkcne? Cital som, ze prenositelnost sa znizuje pouzitim poli, ale tak bash je snad vsade a toto aj tak nepojde nikde do sveta.

Ten tvoj navrh je vyborny, len ako tam dat to, aby bralo *.png subory?

29.1.2010 21:11 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Bash expanzia
seq -s ' ' -f %g.png $START_POS $END_POS
29.1.2010 21:15 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Bash expanzia

Jinak mi není jasné, co je to za jazyk (příkaz let mi asociuje nějaký historický dialekt basicu), ale jestli správně tuším, co jste měl na mysli, tak to se typicky dělá takto:

  for f in *.png; do
    convert ... "$f" "${f%.png}_down.png"
  done
29.1.2010 22:44 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Bash expanzia
Ak pominieme chybajuci spatny apostrof, tak je to bash ako vysity. let a++ je to iste ako ((a++))
If you hold a Unix shell up to your ear, you can you hear the C.
29.1.2010 21:00 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Bash expanzia
Odpovědět | | Sbalit | Link | Blokovat | Admin
A=1; B=100; eval echo {"$A".."$B"};
If you hold a Unix shell up to your ear, you can you hear the C.
29.1.2010 21:03 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Bash expanzia
Uzasne. :) Dakujem mockrat, snad vam to raz vynahradim.
29.1.2010 21:03 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Bash expanzia
eval nevytvara novy proces na rozdiel od seq. Pri jednorazovom pouziti je to uplne jedno, ale vo celkom cykle...
If you hold a Unix shell up to your ear, you can you hear the C.
29.1.2010 21:40 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Bash expanzia
seq toho umí trochu víc.
In Ada the typical infinite loop would normally be terminated by detonation.
30.1.2010 00:24 l4m4
Rozbalit Rozbalit vše Re: Bash expanzia
Jelikož zde není seq ve vnitřním cyklu, naopak je vně, aby se ten cyklus vytvořil, tak to bude v tomto případě zhruba putna...

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.