2014-01-11 69 views
0

考慮下面的程序,它讀取用戶輸入兩次shell腳本,如果不工作別人循環

function search_grep 
{ 
    if [ "$2" == "" ];then 
    for x in "${title[@]}" 
    do 
    value=$(echo $x | grep "$1") 

     if [ "$value" != "" ];then 
     echo "$value" 
     fi  

    done 
    elif [ "$1" == "" ];then 
    hello="123" 
    echo "$hello" 

    fi   

} 

echo -n "Enter title : " 
read book_title 

echo -n "Enter author : " 
read author 

title=(CatchMe HappyDay) 
search_grep $book_title $author 

它的工作原理是,當我進入其次HappyDay預計無論其

當我進入foo其次通過,我希望控制檯輸出爲

,而不是我得到

有人能向我解釋,程序不執行第二ELIF環雖然第二輸入

回答

1

在您的兩個病例的情況下,執行以下操作:

search_grep $book_title $author 

擴展到帶一個參數的調用。因此,「then」子句被激活。原因是由空白組成的不加引號的參數展開爲無,並消失。這是bash的方式。

如果你想傳遞search_grep兩個參數,那麼你就需要引用變量:

search_grep "$book_title" "$author" 
0

here所示,你可以嘗試使用=而不是==

或爲空字符串比較嘗試-z

+0

它適用於第一種情況下,爲什麼母艦一樣第二種情況工作嗎? – Computernerd