2011-09-21 52 views
0
Type() 
{ 
    if [ -d $1 ] 
     then 
      return 1 
    elif [ -e $1 ] 
     then 
      return 2 
    else 
      return 0 
    fi 
} 

Types() 
{ 
    local arg1 arg2 
    for arg1 in [email protected] 
     do 
      arg2=$(Type $arg1) 
      if [ arg2 -eq 1 ] 
       then 
        echo "$arg1 est un répertoire." 
      elif [ arg2 -eq 2 ] 
       then 
        echo "$arg1 n est pas un répertoire." 
      else 
        echo "$arg1 ne correspond à aucune entrée du répertoire." 
      fi 
    done 
} 

我不知道如何在'Types'中使用函數'Type'。我試過「arg2 = $(Type $ arg1)」bur它似乎不工作。請問什麼是正確的語法?在shell中使用另一個函數中的函數

回答

1

如果要使用$(Type ...)的功能,則可以將return ...語句更改爲echo ...(而不是exec echo ...,該功能會執行其他操作)。如果你想保留return ...陳述在Type(),那麼你需要做一些類似Type ...; arg2=$?的測試來自Type()的返回碼。

+0

謝謝!有效 ! – pihug12

1
return 1 

Bash函數通常通過標準輸出返回值。例如,你可以使用這樣的事情,而不是:

exec echo 1 # sends 1 to the standard output and then ends the function 

或者,你可以在0到255之間返回一個整數退出代碼(如你正在嘗試做的)。如果你選擇這樣做,你需要這樣做:

Type $arg1 
arg2=$?  # obtains exit code of last command/function executed 

但是,如果你需要返回一個數組,你必須使用一個全局變量。有關此方法的示例,可能需要參考高級Bash腳本指南的​​部分。

+0

謝謝!我使用了最後一個選項。 – pihug12

相關問題