Skip to content

Instantly share code, notes, and snippets.

@sechiro
Last active March 26, 2020 01:16
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sechiro/3bd58743bb66c2dc3234 to your computer and use it in GitHub Desktop.
Save sechiro/3bd58743bb66c2dc3234 to your computer and use it in GitHub Desktop.
スペース区切りで変数を分解するベンチマーク.
#!/bin/bash
set -ue
NUM_LOOPS=1000
use_cut(){
for i in $(seq 1 $NUM_LOOPS)
do
line="i-ec56a9f5 vol-07d00601 servername"
instance_id=`echo $line | cut -d' ' -f1`
volome_id=`echo $line | cut -d' ' -f2`
instance_name=`echo $line | cut -d' ' -f3`
echo $instance_id
echo $volome_id
echo $instance_name
done
}
use_set(){
for i in $(seq 1 $NUM_LOOPS)
do
line="i-ec56a9f5 vol-07d00601 servername"
set -- $line
instance_id=$1
volome_id=$2
instance_name=$3
echo $instance_id
echo $volome_id
echo $instance_name
done
}
use_herestring(){
for i in $(seq 1 $NUM_LOOPS)
do
line="i-ec56a9f5 vol-07d00601 servername"
read instance_id volome_id instance_name <<< "$line"
echo $instance_id
echo $volome_id
echo $instance_name
done
}
use_array(){
for i in $(seq 1 $NUM_LOOPS)
do
line="i-ec56a9f5 vol-07d00601 servername"
instance_array=($line)
instance_id=${instance_array[0]}
volome_id=${instance_array[1]}
instance_name=${instance_array[2]}
echo $instance_id
echo $volome_id
echo $instance_name
done
}
use_expansion(){
for i in $(seq 1 $NUM_LOOPS)
do
line="i-ec56a9f5 vol-07d00601 servername"
instance_id=${line%% *}
rest_fields=${line% *}
volome_id=${rest_fields#* }
instance_name=${rest_fields##* }
echo $instance_id
echo $volome_id
echo $instance_name
done
}
echo "cut version" >&2
time use_cut
echo "" >&2
echo "set version" >&2
time use_set
echo "" >&2
echo "herestring version" >&2
time use_herestring
echo "" >&2
echo "bash array version" >&2
time use_array
echo "" >&2
echo "bash parameter expansion version" >&2
time use_expansion
@sechiro
Copy link
Author

sechiro commented Jan 25, 2015

実行結果

$ bash benchmark.sh > /dev/null
cut version

real    0m12.197s
user    0m4.914s
sys 0m8.414s

set version

real    0m0.099s
user    0m0.093s
sys 0m0.005s

herestring version

real    0m0.413s
user    0m0.143s
sys 0m0.261s

bash array version

real    0m0.120s
user    0m0.113s
sys 0m0.007s

bash parameter expansion version

real    0m0.134s
user    0m0.126s
sys 0m0.007s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment