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

Performance 为什么在外部程序上使用内置命令(在bash脚本中)?,performance,bash,compatibility,built-in,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 "

这个问题与使用外部程序而不是内置结构的负面影响有关——特别是关于
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]\]=}
}
就兼容性而言,
使用内置()
使用外部()
之间有很大区别吗

关于兼容性,是否有某种类型的外部程序几乎是通用的?有没有提供此类信息的资源?(在上面的例子中,我阅读了很多资料,然后才觉得
sed
是比
awk
或第二语言更兼容的选择。)


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

与您的示例相反,对于大型数据集,内置速度较慢


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


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

您是否尝试过为示例计时?在我的系统上,使用_内置运行速度比使用_外部运行速度快2.5倍。(当然,如果您重写使用_external来避免调用sed两次-您应该这样做,您不限于每次调用一个sed命令-那么内置版本的速度只有两倍。)我注意到,当我第一次测试OP的函数时,忘记了包含一个参数。内置版本运行得非常非常慢。