我正在尝试创建一个检查目录是否存在的函数,如果存在则返回1,否则返回0。这是一个实用函数,然后我在if语句中使用它。这是代码
function bean-exists {
if (( $# < 1 )); then
print "usage: $0 BEAN_NAME" >&2
exit -1
fi
if [[ -e "${YAHMDIR}/beans/$1" ]]; then
echo "FOUND"
return 1
fi
return -1
}
if (bean-exists "hosts"); then
echo YEAH
else
echo NOPS
fi
我不知道为什么,但这是打印
FOUND
NOPS
如果FOUND它应该打印YEAH。任何人都可以向我解释发生了什么事吗?
答案 0 :(得分:2)
在Unix shell中(与许多其他编程语言相反)0
代表 true ,而任何其他(整数)值代表 false 。这与Unix程序在成功完成时返回0
并且任何其他值(通常在1到255之间)表示一些负面结果或错误相关。
因此,如果文件存在,则应返回0
,如果不存在,则返回1
。
当您返回1
时,if
会将其解释为false
并转到else
分支。
如果找不到文件,最后 return 1
。这是正确的,但根据您的描述,我原本期望return 0
。