@tonio; per favore non difendere usando costrutti subshell (`... o $ (...)) quando non sono necessari (per mantenere la confusione al massimo, $ ((...)) non è un costrutto sub-shell). Le sub-shell possono fare un enorme successo anche con quantità di dati piuttosto banali. Lo stesso vale per ogni posto in cui un programma esterno è usato per fare qualcosa che potrebbe essere fatto con un built-in shel.
Esempio:
num=1
time while [[ $num -lt 10000 ]]; do
num=$((num+1))
done
echo $num
num=1
time while /bin/test $num -lt 10000; do
num=$(/bin/expr $num + 1)
done
echo $num
uscita (corsa nel ksh su Linux):
real 0m0.04s
user 0m0.04s
sys 0m0.01s
10000
real 0m20.32s
user 0m2.23s
sys 0m2.92s
10000
... così run-time fattore 250, e il fattore tempo di CPU di 100. Ammetto l'esempio che ho usato era esagerato, richiedendo esplicitamente l'esclusione di tutti i built-in, ma penso che il punto sia stato fatto: creare nuovi processi è necessario, evitarlo quando puoi e conoscere la shell per riconoscere dove sono nuovi processi creato.
fonte
2012-01-04 09:35:02
Change 'fino a prova num eq 10' a' fino a prova $ num eq 10'! È tutto su $$ !! –
In primo luogo, la prima volta che echo num è già 2, quindi cambia 'num = 1' a' num = 0' che dovrebbe stampare tutti i numeri b/n 1 & 10 inclusi 1 e 10 + la correzione fornita da Fredrik –
Eliminazione questo sarebbe ingiusto per le persone che hanno preso il loro tempo per rispondere alla tua domanda. – NullUserException