Você está recebendo este erro:
line 43: return: -1: invalid option return: usage: return [n]
Isso ocorre porque o -1
é interpretado como uma opção. Use isso, --
significa 'fim de opções':
return -- -1
que retorna com 255
.
Solução de trabalho:
#!/bin/bash
function removebook_option()
{
echo -n "Title : "
read title_input2
echo -n "Author: "
read author_input2
error="$(checkexist "$title_input2" "$author_input2")" # <--
echo "$error"
if [[ "$error" != NOT_FOUND ]]; then # <--
#removebook
echo "New book title $title_input removed successfully"
else
echo "Book does not exist"
fi
}
function checkexist()
{
counter=0
for x in "${title[@]}" # <--
do
for y in "${author[@]}" # <--
do
if [[ $x == $1 ]] && [[ $y == $2 ]]; # <--
then
error=$counter
echo "$error" # <--
return
fi
done
((counter++)) # <--
done
error=NOT_FOUND # <--
echo "$error"
return
}
title=(foo1 foo2)
author=(bar1 bar2)
removebook_option
Edições marcadas com # <--
Isso funciona ao invés de retornar um valor inteiro, ecoa (escreve na tela). Geralmente, isso seria impresso no terminal, mas a sintaxe $( ... )
captura a saída impressa e a atribui a error
in removebook_option()
. Isso permite 'retornar' qualquer string, eu fiz isso retornar um valor sentinela de NOT_FOUND
se não for encontrado.
Notas:
- A expansão da matriz deve ser agrupada com aspas duplas:
"${author[@]}"
e"${title[@]}"
- Use
[[ ... ]]
em vez de[ ... ]
.