![与 Shebang 的命令距离?](https://linux22.com/image/59389/%E4%B8%8E%20Shebang%20%E7%9A%84%E5%91%BD%E4%BB%A4%E8%B7%9D%E7%A6%BB%EF%BC%9F.png)
shebang (#!/bin/sh) 放置在 bash 脚本的第一行,第二行后面通常是描述脚本执行的操作的注释。如果没有特殊原因,您决定将第一个命令放置在 shebang 和注释下方,例如 10000 行,该怎么办?这会减慢脚本的执行速度吗?
答案1
为了找到答案,我创建了两个 shell 文件。每个都以 shebang 行开始,并以唯一的命令结束date
。 long.sh
有 10,000 行评论,而short.sh
没有。结果如下:
$ time short.sh
Wed Nov 12 18:06:02 PST 2014
real 0m0.007s
user 0m0.000s
sys 0m0.004s
$ time long.sh
Wed Nov 12 18:06:05 PST 2014
real 0m0.013s
user 0m0.004s
sys 0m0.004s
差异不为零,但不足以让您注意到。
让我们变得更极端。我创建very_long.sh
了百万评论行:
$ time very_long.sh
Wed Nov 12 18:14:45 PST 2014
real 0m1.019s
user 0m0.928s
sys 0m0.088s
这有明显的延迟。
结论
10,000 行注释的影响很小。一百万行评论会导致严重的延迟。
如何创建long.sh
和very_long.sh
为了创建脚本long.sh
,我使用了以下awk
命令:
echo "date" | awk 'BEGIN{print "#!/bin/bash"} {for (i=1;i<=10000;i++) print "#",i} 1' >long.sh
为了创建very_long.sh
,我只需要稍微修改上面的代码:
echo "date" | awk 'BEGIN{print "#!/bin/bash"} {for (i=1;i<=1000000;i++) print "#",i} 1' >very_long.sh
答案2
是的,理论上是这样,因为 shell 必须读取所有这些空行并验证它们是否为空。但是效果会非常小,以至于您很难测量它 - 特别是如果您反复尝试(无需重新启动),因为一旦您运行脚本,它就会被缓存在内存中,您甚至不会任何输入/输出。