@tonio; por favor, no defienda el uso de construcciones subshell (`... o $ (...)) cuando no sean necesarias (para mantener la confusión al máximo, $ ((...)) no es una construcción sub-shell) Las subcapas pueden tener un gran rendimiento incluso con cantidades de datos bastante triviales. Lo mismo es cierto para cada lugar donde se usa un programa externo para hacer algo que se puede hacer con un shel incorporado.
Ejemplo:
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
salida (pista en ksh en Linux):
real 0m0.04s
user 0m0.04s
sys 0m0.01s
10000
real 0m20.32s
user 0m2.23s
sys 0m2.92s
10000
... así que en tiempo de ejecución del factor de 250, y el factor de tiempo de CPU de 100. Admito el ejemplo que utilicé fue exagerado, requiriendo explícitamente que se omitieran todos los complementos, pero creo que el punto fue expresado: la creación de nuevos procesos es costosa, evítela cuando pueda y conozca su caparazón para reconocer dónde están los nuevos procesos. creado.
Cambio 'hasta eq num prueba 10' a' hasta que el ensayo $ num eq 10'! Es todo sobre $$ !! –
En primer lugar, la primera vez que echo num ya es 2, cambie 'num = 1' por' num = 0' que debería imprimir todos los números b/w 1 y 10 inclusive 1 y 10 + la corrección provista por Fredrik –
Eliminando esto sería injusto para las personas que se tomaron su tiempo para responder su pregunta. – NullUserException