【问题标题】:BASH: How to correctly return true and false from a functionBASH:如何从函数中正确返回真假
【发布时间】:2015-09-29 03:41:01
【问题描述】:

我在 bash 脚本中有一个函数,如果进程正在运行,我想返回 true,否则返回 false。我的函数的代码是:

    checkProcess() {
        if [ kill -s 0 $(getPid) > /dev/null 2>&1 ]; then
            return 0
        else
            return 1
        fi 
    }

当我使用此功能时,它似乎不起作用。我是这样使用的:

    if [ ! checkProcess ]; then
        #do something, like rm file containing PID
    fi

但是,如果我只使用下面的实现,它就可以正常工作:

    if [ ! kill -s 0 $(getPid) > /dev/null 2>&1 ]; then
        #do something, like rm file containing PID
    fi

这是有原因的吗?我没有在我的函数中返回正确的值吗?还是这一切都被错误地实施了?

【问题讨论】:

    标签: bash function boolean return kill


    【解决方案1】:

    [ 不是语法;这是一个命令。它通常与if 一起使用,根据其返回码工作。

    直接检查不同命令的返回码,例如kill,您应该删除[][ 的最后一个参数):

    if kill -s 0 $(getPid) &>/dev/null; then
        # ...
    fi
    

    请注意,&> 是 Bash 扩展,相当于 >/dev/null 2>&1

    【讨论】:

    • 好的,有道理。那么我应该在 if [ -f $somefile ]; 中使用 [ 和 ]那么
    • @james02 是的,这将测试名称为 $somefile 的文件是否存在,尽管您应该始终引用变量 [ -f "$somefile" ]
    • 两者都有!请参阅此article on quotes in bash,了解有关为什么引用变量是个好主意的更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2015-03-03
    相关资源
    最近更新 更多