這個問題關注的是使用外部程序而不是內置結構的負面影響 - 特別是關於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