可以使用在bash if语句中调用“test”的函数吗?

时间:2011-12-02 15:32:28

标签: bash function shell testing if-statement

为了使我的脚本更具可读性,我想将if-then-else-fi语句的测试放在一个函数中,例如下面的例子:

#!/bin/bash

function isFileUnderVersionControl() {
  test $( svn info "$1" 2>1 1>/dev/null; echo $? ) -eq 1
}


if isFileUnderVersionControl "$1"
  then
    echo "is under version control
  else
    echo "is not under version control"
fi

这是否可以在bash中使用?如果是这样,如何正确地执行它?

2 个答案:

答案 0 :(得分:2)

不需要test

if svn info "$1" &>/dev/null ; then
    echo Under version control
else
    echo Not under vc
fi

或者,如果您需要该功能:

function isFileUnderVersionControl() {
    svn info "$1" &>/dev/null
}
if isFileUnderVersionControl "$1" ; then ... fi

答案 1 :(得分:0)

Bash函数只能返回状态代码而不能返回任何其他内容。 return 语句设置该状态代码的值,如果不存在,则将状态代码设置为函数内执行的最后一个命令的状态代码。在这种情况下,它是测试命令,您可以使用退出状态变量 $?

检查其返回状态代码
isFileUnderVersionControl "$1"
rc=$?
if [[ $rc -eq 0 ]]
then
    echo "is under version control"
else
    echo "is not under version control"
fi