这个问题涉及使用外部程序与而不是内置结构的负面影响 - 特别是关于 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/