这个问题关注的是使用外部程序而不是内置结构的负面影响 - 特别是关于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
或第二语言更兼容的选择之前,我不得不阅读许多来源。
我真的想权衡利弊,所以请随意指出内置命令和外部程序之间的其他考虑因素(即性能,健壮性,支持等)。或者,“内置与外部”的问题通常是每个程序的问题吗?
答案 0 :(得分:1)
与直觉相反,使用您的示例
,内置对于大型数据集来说速度较慢答案 1 :(得分:1)
客观地说,使用内置命令更有效,因为您不需要为它们分叉任何新进程。 (从主观上讲,这种分叉的开销可以忽略不计。)大量的内置命令可能会被单调用包含在外部程序中。
使用内置函数可能会也可能不会产生更易读的代码。这取决于谁在阅读代码。