Portál AbcLinuxu, 12. května 2025 06:09
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:
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
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?
seq -s ' ' -f %g.png $START_POS $END_POS
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
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.