运行 循环中的命令,而无需每次都生成新的子 shell
Running commands in a loop without spawning a new subshell each time
我有一个 bash 脚本,它以纪元时间读取大量日期,并确定它们发生的一天中的(本地)小时。相关片段:
while read ts
do
hour="$(date -d@$((${ts} / 1000)) +%H)"
((hourly_counts["${hour}"]+=1))
done < "${jqfile}"
它相当慢,因为每次调用 date
都会生成一个新的子 shell。有没有明智的方法来解决这个问题?看起来 date
不支持多个查询。
我能想到的就是生成一个新的 shell,然后通过管道将 date
命令传递给它并取回结果,以便它们都在同一个 shell 中执行.但我不清楚如何做到这一点,而且它似乎有点过度设计。
使用printf
:
printf -v hour '%(%H)T' "$(( ts / 1000 ))"
键入 help printf
以了解有关该命令的更多信息。
同时勾选 strftime(3)
。行为可能取决于 TZ
和 LC_TIME
.
的值
我有一个 bash 脚本,它以纪元时间读取大量日期,并确定它们发生的一天中的(本地)小时。相关片段:
while read ts
do
hour="$(date -d@$((${ts} / 1000)) +%H)"
((hourly_counts["${hour}"]+=1))
done < "${jqfile}"
它相当慢,因为每次调用 date
都会生成一个新的子 shell。有没有明智的方法来解决这个问题?看起来 date
不支持多个查询。
我能想到的就是生成一个新的 shell,然后通过管道将 date
命令传递给它并取回结果,以便它们都在同一个 shell 中执行.但我不清楚如何做到这一点,而且它似乎有点过度设计。
使用printf
:
printf -v hour '%(%H)T' "$(( ts / 1000 ))"
键入 help printf
以了解有关该命令的更多信息。
同时勾选 strftime(3)
。行为可能取决于 TZ
和 LC_TIME
.