如何在if中使用zsh函数返回?

时间:2014-08-08 04:31:44

标签: zsh

我正在尝试创建一个检查目录是否存在的函数,如果存在则返回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。任何人都可以向我解释发生了什么事吗?

1 个答案:

答案 0 :(得分:2)

在Unix shell中(与许多其他编程语言相反)0代表 true ,而任何其他(整数)值代表 false 。这与Unix程序在成功完成时返回0并且任何其他值(通常在1到255之间)表示一些负面结果或错误相关。

因此,如果文件存在,则应返回0,如果不存在,则返回1

当您返回1时,if会将其解释为false并转到else分支。

如果找不到文件,最后 return 1。这是正确的,但根据您的描述,我原本期望return 0