Anda dapat menulis fungsi yang mengembalikan status yang diberikan sebagai argumen, atau 255
jika tidak ada yang diberikan. (Saya menyebutnya ret
sebagai "mengembalikan" nilainya.)
ret() { return "${1:-255}"; }
dan gunakan ret
di tempat panggilan Anda ke exit
. Ini menghindari ketidakefisienan membuat sub-shell dalam jawaban yang saat ini diterima.
Beberapa pengukuran.
time bash -c 'for i in {1..10000} ; do (exit 3) ; done ; echo $?'
pada komputer saya membutuhkan sekitar 3,5 detik.
time bash -c 'ret(){ return $1 ; } ; for i in {1..10000} ; do ret 3 ; done ; echo $?'
pada komputer saya membutuhkan waktu sekitar 0,051 detik, 70 kali lebih cepat. Menempatkan penanganan standar masih menyisakan 60 kali lebih cepat. Jelas loop memiliki beberapa overhead. Jika saya mengubah tubuh loop menjadi hanya :
atau true
kemudian waktunya dibagi dua menjadi 0,025, loop yang benar-benar kosong adalah sintaks yang tidak valid. Menambahkan ;:
ke loop menunjukkan bahwa perintah minimal ini memakan waktu 0,007 detik, sehingga overhead loop adalah sekitar 0,018. Mengurangi overhead ini dari dua tes menunjukkan bahwa ret
solusinya lebih dari 100 kali lebih cepat.
Jelas ini adalah pengukuran sintetis, tetapi banyak hal bertambah. Jika Anda membuat semuanya 100 kali lebih lambat dari yang seharusnya, maka Anda akan mendapatkan sistem yang lambat. 0,0
exec exit 3
bukan bueno, saya dapatkan"exec: exit: not found"