2011-07-07 73 views
4

我遇到了一個我認爲應該很容易解決的問題,但對於我的生活,我無法弄清楚。可能是真的很晚;不確定。BASH:if語句執行命令和函數

所以我有一個shell腳本,我有一個if語句,我需要運行。問題是我在這個bash腳本中有一個函數,我正在使用這個函數在if語句內部建立這個find命令的一部分。我想知道我可以如何做到這一點,而不會收到錯誤[: too many arguments

下面是當前的代碼:

 
if [ -n `find ./ `build_ext_names`` ];then 

這就是我真正需要發佈。我需要弄清楚如何運行build_ext_names該find命令,後者又是ifstatement

+0

build_ext_names輸出是什麼? –

+0

它輸出'( - filename filename.ext -o -name filename.otherext)'代碼。基本上,有一個變量允許你放入你想要的任何擴展「允許」,然後這個函數從數組中讀入並構建所需的代碼。它可以處理單個和多個選項。它太酷了。 – drewrockshard

回答

12

Michael Aaron Safyan有正確的想法,但要解決直接的問題,您可以使用更簡單的$(command)構造而不是```命令```command substitution。它允許更簡單的嵌套:

if [ -n "$(find ./ "$(build_ext_names)")" ]; then 
+0

+1同意。反引號嵌套不好。 –

+0

這完美的作品。我知道這件事很容易,因爲我以前做過,只是不記得如何。 – drewrockshard

2

這是比較容易,如果你把它分解了內內:

function whateverItIsYouAreTryingToDo() { 
    local ext_names=$(build_ext_names) 
    local find_result=$(find ./ $ext_names) 
    if [ -n "$find_result" ] ; then 
     # Contents of if... 
    fi 
} 
+0

這是我要研究的東西。我將來可以完全利用這種功能。很高興你打開了我的眼睛(本地bash變量)! – drewrockshard