Bash shell脚本如果else循环不工作

Bash shell脚本如果else循环不工作,bash,shell,debugging,command-line,Bash,Shell,Debugging,Command Line,给定以下程序,该程序读取用户输入两次 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

给定以下程序,该程序读取用户输入两次

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
后跟
时,我希望控制台输出为

123

相反,我得到了

有人可以向我解释一下,程序没有执行第二个elif循环,尽管第二个输入是

,如图所示,您可以尝试使用=而不是==


或者,对于空字符串比较,请在两种情况下都尝试-z

,如下所示:

search_grep $book_title $author
扩展为具有单个参数的调用。因此,“then”子句被激活。原因是由空格组成的无引号参数扩展为零并消失。这就是bash的方式

如果要传递两个search_grep参数,则需要引用以下变量:

search_grep "$book_title" "$author"

它适用于第一种情况,为什么不适用于第二种情况??