我比较了 unix 字符串和管道数据输入的执行时间bc
:
管道
time for i in {1..1000}
do
echo "sqrt(5.09)" | bc -q > /dev/null
done
real 0m3.584s
user 0m0.899s
sys 0m2.404s
对比
此处字符串
time for i in {1..1000}
do
bc -q <<< "sqrt(5.09)" > /dev/null
done
real 0m5.137s
user 0m0.686s
sys 0m2.262s
(这些值是平均值:经过多次测试)
因此,real
使用 here-strings 的执行时间比使用管道的执行时间更长,但使用here-strings 时user
+sys
次数的总和仍然比我最初预期的要少(echo ... | 在新的进程中执行,因此存在执行开销)。为什么 bash 的行为如此奇怪?