该程序通过匹配用户输入的书名和书籍作者来检查某个书名是否存在。
function removebook_option()
{
echo -n "Title : "
read title_input2
echo -n "Author: "
read author_input2
checkexist $title_input2 $author_input2
error=$?
echo "$error"
if [ $error != -1 ];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
return "$error"
fi
done
counter=$((counter+1))
done
error=-1
return "$error"
}
title=(foo1 foo2)
author=(bar1 bar2)
removebook_option
我收到一个非常奇怪的错误,function checkexist()
当返回值不匹配时,返回 2 而不是 -1error=-1
第 43 行:返回:-1:无效选项返回:用法:返回 [n]
编辑:由于未知的原因,我只能返回 0-255 之间的值,有人知道如何返回负值吗?
你可以尝试输入错误的数据来查看奇怪的错误
我需要帮助解决这个问题,谢谢!!!
答案1
您收到此错误:
line 43: return: -1: invalid option return: usage: return [n]
这是因为 被-1
解释为一个选项。使用这个,--
意味着“选项结束”:
return -- -1
返回255
。
工作解决方案:
#!/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
编辑标记 # <--
它的工作原理是,它不返回整数值,而是将其回显(写入屏幕)。通常,这会打印到终端,但语法$( ... )
会捕获打印的输出,并将其分配给error
in removebook_option()
。这允许“返回”任何字符串,我让它NOT_FOUND
在未找到时返回一个标记值。
笔记:
- 数组扩展应该用双引号引起来:
"${author[@]}"
和"${title[@]}"
- 使用
[[ ... ]]
而不是[ ... ]
。