2

这个问题与使用外部程序而不是内置结构的负面影响有关——特别是关于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第二语言更兼容的选择。)

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

4

2 回答 2

1

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

大型数据集的参数扩展缓慢

于 2013-04-16T17:26:53.153 回答
1

Objectively speaking, using built-in commands is more efficient, since you don't need to fork any new processes for them. (Subjectively speaking, the overhead of such forking may be negligible.) Large numbers of built-in commands that could be subsumed by a single call to an external program may be slower.

Use of built-ins may or may not produce more readable code. It depends on who is reading the code.

于 2013-04-16T17:28:35.173 回答