performance - 为什么要使用内置命令而不是外部程序(在 bash 脚本中)?

标签 performance bash compatibility built-in

这个问题涉及使用外部程序与而不是内置结构的负面影响 - 特别是关于 sed 和一般的外部程序。

我的想法是,为了最大限度地提高 UNIX 系统之间的兼容性,应该使用内置命令。然而,有些程序实际上是标准的。考虑这个例子:

# Both functions print an array definition for use in 
#   assignments, for loops, etc.

uses_external() {
    declare -p $1  \
      | sed -e "s/declare \-a [^=]*=\'\(.*\)\'\$/\1/" \
      | sed "s/\[[0-9]*\]\=//g"
}

uses_builtin() {
    local r=$( declare -p $1 )
    r=${r#declare\ -a\ *=}
    echo ${r//\[[0-9]\]=}
}

就兼容性而言,uses_builtin()uses_external() 之间有很大区别吗?

关于兼容性,是否有一类几乎通用的外部程序?有提供此类信息的资源吗? (对于上面的示例,在我确信 sed 是比 awk 或第二语言更兼容的选择之前,我必须阅读许多资料。)

我真的很想权衡利弊,所以请随意指出内置命令和外部程序之间的其他考虑因素(即性能、稳健性、支持等)。或者,“内置与外部”的问题通常与每个程序有关吗?

最佳答案

客观地说,使用内置命令效率更高,因为您不需要为它们创建任何新进程。 (主观上来说,这种 fork 的开销可能可以忽略不计。)可以通过对外部程序的单次调用来包含大量内置命令,速度可能会更慢。

使用内置函数可能会也可能不会产生更具可读性的代码。这取决于谁在阅读代码。

关于performance - 为什么要使用内置命令而不是外部程序(在 bash 脚本中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16042985/

相关文章:

bash - 如何在 bash 中使用 getopts 的示例

android - JSON文件VS SQLite android

c - 哪个更快 : Appropriate data input or appropriate data structure?

c++ - 为什么我的 8M L3 缓存对大于 1M 的阵列没有任何好处?

linux .cshrc 文件编译错误

bash - 以非递归方式列出可用标签的 XPath(在 shell 脚本中使用 xmllint)

performance - Drupal:在用户帐户页面上获取用户名而不破坏性能

java - Hibernate for Java 1.5 最新版本是多少

python - 如何编写与Python 3.x尽可能兼容的Python 2.x?

java - 有没有办法判断一个类是否为 java6 编译?