On Monday 24 January 2005 12:14, Alex 'CAVE' Cernat wrote: > Care e cea mai simpla de a scrie un inc(x) in bash sau chiar mai mult;
Cea mai simpla si eficienta metoda ar fi folosind forma: for ((i=0; i<n; i++)); do ... done Simpla - pentru ca e asemanatoare cu cea din limbajele de programare, eficienta - pentru ca din interpretarea lui 'for' rezulta cod care se executa "mai repede". > momentan folosesc ceva de genul > > a=1 > while [ $a -le 255 ]; do > ... bla bla bla ... > a=$(( $a + 1 )) > done In primul rand daca scriptul e bash si nu vrei sa-l faci portabil in POSIX sh inlocuieste testele facute cu [...] cu [[...]]. [ este acelasi lucru cu /bin/test deci necesita executia unui alt proces care sa faca evaluarea. "[[" este evaluat intern de bash deci va da un rezultat mai rapid. Rescrierea while-ului de mai sus intr-o forma mai eficienta ar fi: a=1 while [[ $a -le 255 ]]; do ... ((a++)) done La fel, folosirea formei "((a++))" este mai eficienta decat echivalentul "a=$((a+1))". > ar mai fi un > > for a in `seq 1 255` do; ..... ; done > > dar care afaik merge doar pentru din 1 in 1, daca vreau din 3 in 3 pa Dupa cum au spus Mituc si Dan poti folosi 'seq' pentru a genera o lista de elemente (nu neaparat consecutive). Totusi 'seq' prezinta 2 dezavantaje: 1. necesita executarea in prealabil a comenzii 'seq' pentru a genera lista de elemente (un minus de viteza) 2. in cazul unei liste mai mari, rezultatul lui 'seq' va ocupa multa memorie Bineinteles daca ajungi sa umbli la asemenea performante probabil solutia e sa rescrii codul in C, dar totusi nu strica sa stii sa scrii cod eficient direct in bash :) Mihai --- Detalii despre listele noastre de mail: http://www.lug.ro/
