BASH函数中for循环中的数组

时间:2017-07-18 08:06:45

标签: bash shell ubuntu

    function bookExistCheck {

    for i in "${bookTitle[@]}"
    do
        if [ "$1" == "${bookTitle[$i]}" ]; then
            if [ "${bookAuthor[$i]}" == "$2" ]; then
                bookExist=true
                echo "Book already exist in database."
            fi
        fi
    done

}

我正在尝试编写一个函数,它接受2个变量,title和author,然后检查它是否已经存在。 BookTitle和BookAuthor是已经拥有书名和作者价值的数组。目前使用上面的代码,即时收到错误

 if [ "$1" == "{$bookTitle[$i]}" ]; then

错误说

  

./ menu.sh:25行:哈利波特 - 混血王子:语法错误   in expression(错误标记是" Potter - The Half Blood Prince")

我对BASH很新,所以我的猜测是一个synthax错误?

1 个答案:

答案 0 :(得分:1)

当你写for i in "${bookTitle[@]}"时,i不是数组的索引,它已经是数组的元素。

尝试写下这样的内容:if [ "$1" == "${i}" ]; then

修改

您也可以使用for循环:

for (( i=0; i<=${#bookTitle[@]}; i++ )); do 

在这种情况下,i会将索引从0调整为bookTitle