Result pattern is Faster than Name Ref pattern.
Result Pattern is less than 2x faster Name Reference Functions for Performance Improvement.
See benchmark below (however, for all typical usage Name Reference Functions for Performance Improvement should be preferred as it's plenty faster than process substitution).
GT-Sandbox-Snapshot
Code
foo() {
local -n some_local_name="${1:?name of external variable}"
some_local_name=42
}
bar() {
some_global_result=42
}
time_name_ref() {
local var1
for i in {1..10000} ; do
foo var1
done
}
time_result_pattern(){
local var1
for i in {1..10000} ; do
bar
var1="${some_global_result:?}"
done
}
main() {
# Warmup
for i in {1..100}; do
foo var1
bar
done
time time_name_ref
time time_result_pattern
}
main "${@}" || exit 1
Command to reproduce:
gt.sandbox.checkout.commit 30e75e51081941dc1e99 \
&& cd "${GT_SANDBOX_REPO}/bash" \
&& cmd.run.announce "./main.sh"
Recorded output of command:
real 0m0.053s
user 0m0.053s
sys 0m0.000s
real 0m0.035s
user 0m0.035s
sys 0m0.000s
Backlinks