@tonio; gerekmediklerinde subshell (`... veya $ (...)) yapıları kullanmayı savunmayın (karışıklığı en yüksek seviyede tutmak için $ ((...)) alt kabuk yapı değildir.). Alt-kabuklar, oldukça önemsiz miktarda veriyle bile inanılmaz bir performans yakalayabilir. Aynısı, dahili bir raf ile yapılabilecek bir şey yapmak için harici bir programın kullanıldığı her yer için de geçerlidir.
Örnek:
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
Çıkış (Linux üzerinde ksh koşmak):
real 0m0.04s
user 0m0.04s
sys 0m0.01s
10000
real 0m20.32s
user 0m2.23s
sys 0m2.92s
10000
... İtiraf 100 kadar 250 çalışma zamanı faktörü, ve CPU-zaman faktörü Kullandığım örnek abartılı biriydi, açıkça tüm yerleşiklerin atlanmasını gerektiriyordu, ama sanırım bu nokta yapıldı: yeni süreçler yaratmak expenisve, yapabileceğiniz zaman kaçının ve kabuğunuzun yeni süreçlerin nerede olduğunu bilmesini sağlayın. yarattı.
Değiştir'! Onun tüm hakkında $$! –
Öncelikle, zaten 2 numarasını tekrarladığınızda, num = 1 'değerini' num = 0 'olarak değiştirin, bu sayede 1/10 1 ve 10 dahil olmak üzere tüm sayıları bastırabilirsiniz 1 ve 10 + Fredrik tarafından sağlanan düzeltme –
Silme Bu, sorunuzu cevaplamak için zamanlarını alan insanlara haksızlık olur. – NullUserException