@ Тонио; пожалуйста, не рекомендуйте использовать конструкции subshell (`... или $ (...)), когда они не нужны (чтобы избежать путаницы с максимумом, $ ((...)) не является конструкцией sub-shell ). Подоболочки могут нанести огромный удар по производительности даже при довольно тривиальных объемах данных. То же самое верно для каждого места, где внешняя программа используется для создания чего-то, что может быть сделано со встроенной оболочкой.
Пример:
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
Вывод (запускается в ksh в Linux):
real 0m0.04s
user 0m0.04s
sys 0m0.01s
10000
real 0m20.32s
user 0m2.23s
sys 0m2.92s
10000
... таким образом, коэффициент времени выполнения 250 и коэффициент времени процессора 100. Я допускаю, что пример, который я использовал, был преувеличенным, с явным требованием обойти все встроенные модули, но я думаю, что смысл made: создание новых процессов обходится дорого, избегайте его, когда можете, и знайте, что ваша оболочка распознает, где создаются новые процессы.