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
}
Я пытаюсь написать функцию, которая принимает две переменные, название и автора, а затем проверяет, существует ли она уже. BookTitle и BookAuthor - это массивы, которые уже содержат значения названий книг и авторов. В настоящее время с приведенным выше кодом я получаю сообщение об ошибке в строке
if [ "$1" == "{$bookTitle[$i]}" ]; then
Ошибка говорит
./menu.sh: строка 25: Гарри Поттер - Принц-полукровка: синтаксическая ошибка в выражении (токен ошибки - «Поттер - Принц-полукровка»)
Я новичок в BASH, поэтому предполагаю, что это ошибка синтаксиса?
1 ответ
Когда вы пишете for i in "${bookTitle[@]}"
, i
не является индексом массива, это уже элемент массива.
Попробуйте написать что-то вроде этого: if [ "$1" == "${i}" ]; then
ИЗМЕНИТЬ
Вы также можете использовать цикл for
:
for (( i=0; i<=${#bookTitle[@]}; i++ )); do
В этом случае i
будет принимать индексы от 0 до bookTitle
.
Похожие вопросы
Новые вопросы
bash
Для вопросов о скриптах, написанных для командной оболочки Bash. Для сценариев оболочки с ошибками / синтаксическими ошибками, пожалуйста, проверьте их с помощью программы shellcheck (или на сервере веб-проверки оболочки по адресу https://shellcheck.net) перед размещением здесь. Вопросы об интерактивном использовании Bash, скорее всего, будут касаться темы Super User, а не переполнения стека.
"${bookTitle[$i]}"
if [ "$1" == "{$bookTitle[$i]}" ]; then
. Но полный код функции правильный.bookExistCheck
, а такжеbookTitle
иbookAuthor
?