如何测量两条Bash命令的执行时间差?
测量两条Bash命令的执行时间差(毫秒级、带方向)
你的原有实现需要手动处理时分秒转毫秒,确实比较繁琐。可以通过简化时间捕获的方式来优化,直接利用/usr/bin/time的内置格式输出秒级带小数的时间,省去字符串转换步骤,同时保证毫秒精度和差值的方向性。
优化后的脚本
#!/bin/bash # 检查参数数量 if [ $# -ne 2 ]; then echo "用法: $0 <命令1> <命令2>" exit 1 fi command1="$1" command2="$2" # 捕获命令1的执行时间(秒,带小数,精度到毫秒) time1=$(/usr/bin/time -f "%e" bash -c "$command1" 2>&1 >/dev/null) # 捕获命令2的执行时间 time2=$(/usr/bin/time -f "%e" bash -c "$command2" 2>&1 >/dev/null) # 计算带方向的时间差,保留3位小数(对应毫秒级) time_diff=$(printf "%.3f" $(echo "$time1 - $time2" | bc -l)) echo "时间差(命令1 - 命令2): ${time_diff} 秒"
关键优化点
- 直接用
%e格式:/usr/bin/time的%e参数会直接输出命令执行的总秒数(比如2.456),自带毫秒级精度,无需再手动解析时分秒 - 包裹复杂命令:用
bash -c "$command1"包裹传入的命令,能正确处理包含管道、空格、参数的复杂命令,避免参数拆分错误 - 高精度计算:
bc -l启用浮点运算支持,保证小数减法的准确性 - 带方向的差值:结果为正说明命令1比命令2耗时更长,为负则说明命令1更快
内容的提问来源于stack exchange,提问作者Uberhumus
相关产品推荐
相关产品推荐

