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

时间:2013-04-16 17:06:30

标签: 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或第二语言更兼容的选择之前,我不得不阅读许多来源。

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

2 个答案:

答案 0 :(得分:1)

与直觉相反,使用您的示例

,内置对于大型数据集来说速度较慢

Parameter expansion slow for large data sets

答案 1 :(得分:1)

客观地说,使用内置命令更有效,因为您不需要为它们分叉任何新进程。 (从主观上讲,这种分叉的开销可以忽略不计。)大量的内置命令可能会被调用包含在外部程序中。

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