我有project written in bash。該接口的一個部分需要用戶調用的bash功能與間接層,像這樣:
require some_fun "arg 1" "arg 2"
其執行some_fun "arg 1" "arg 2"
(然後執行一些額外的事情,因此,它存在的原因)。目前我只是調用"[email protected]"
來做到這一點,一切正常。
我現在有需要推遲這些函數調用,直到後來,並找不到在Bash中這樣做的方法。實際上,我希望每次調用require
時將"[email protected]"
壓入堆棧,然後遍歷該堆棧並執行參數,就像我當前的行爲一樣。這需要多維數組,其中的bash不支持,所以我想這樣的:
require() {
dep_num=${#SK_deps[@]}
dep_var="SK_dep_$dep_num"
eval $dep_var="[email protected]"
SK_deps+=($dep_var)
}
這基本上產生可變變量來存儲「$ @」,並把變量名$SK_deps
。
然後我嘗試遍歷與列表:
for dep_var in ${SK_deps[@]}
do
${!dep_name}
done
但是,這似乎打破了報價參數,所以:
require some_fun "arg 1" "arg 2"
被解釋爲:
require some_fun arg 1 arg 2
沒有引號。
有沒有辦法做我想做的事情?使用「$ *」也會導致報價定位的丟失。感覺應該有一種方法可以在Bash中執行此操作,而不會使用sed/awk進行攻擊。
太棒了。我不知道這存在。將盡快嘗試:) – d11wtq
作品一種享受,謝謝! – d11wtq