waf*_*age -1 bash optimization
我正在写一个半实时的bash脚本,它的运行速度不够快.根据我的理解,Bash引用某种表来查找您提供它的命令的完整路径.指定完整路径会显着加快循环中运行的命令吗?
不太可能.该bash外壳实际上缓存它找到这样只有第一个搜索将是缓慢的可执行文件.
从bash联机帮助页:
如果名称既不是shell函数也不是内置函数,并且不包含斜杠,则bash会在PATH的每个元素中搜索包含该名称的可执行文件的目录.Bash使用哈希表来记住可执行文件的完整路径名(请参阅下面的SHELL BUILTIN命令下的哈希).仅当在散列表中找不到该命令时,才会执行PATH中目录的完整搜索.
加速bash脚本通常采用两种形式:
cut或sed); 和作为第一个示例,使用以下内容提取字符串的第一个字符:
firstchar=$(echo $string | cut -c1-1)
Run Code Online (Sandbox Code Playgroud)
是一个可怕的想法,因为它必须产生进程来完成工作.您可以使用以下内容bash快速完成相同的操作:
firstchar=${string:0:1}
Run Code Online (Sandbox Code Playgroud)
没有产生子过程的相对巨大的成本.
第二点是确保在运行子进程时为工作选择最佳工具.例如,不使用多的一个巨大的管道grep,cut并且sed当它可以用一个非常简单的完成命令awk的单行.