这个问题与使用外部程序而不是内置结构的负面影响有关——特别是关于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
第二语言更兼容的选择。)
我真的很想权衡利弊,所以请随意指出内置命令和外部程序之间的其他考虑因素(即性能、健壮性、支持等)。或者,“内置与外部”的问题通常是每个程序的问题吗?