这个问题关注的是使用外部程序而不是内置结构的负面影响 - 特别是关于sed
以及一般的外部程序。为什么在外部程序中使用内建命令(在bash脚本中)?
我的想法是,为了最大限度地跨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
或第二语言之前,我感觉很舒服。)
我真的要权衡得失,所以感觉免费指出内置命令与外部程序之间的其他考虑(即性能,稳健性,支持等)。或者,“内部vs外部”这个问题通常是按照程序问题吗?
你有没有试过计时你的例子?在我的系统上,uses_builtin的运行速度比uses_external快2.5倍。 (当然,如果你重写uses_external以避免调用sed两次 - 而且你应该每次调用一个sed命令,那么内置版本的速度只有两倍。) – William