BASH:如何从函数中正确返回true和false

3
我在一个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

这是有原因的吗?我的函数返回值不正确吗?还是所有实现都错了?

1个回答

8

[不是语法,而是一条命令。它通常与基于其返回代码工作的if一起使用。

要直接检查其他命令(例如kill)的返回代码,应删除[](即[的最后一个参数):

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

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

好的,那很有道理。所以我应该在 if [ -f $somefile ]; then 中使用 [ 和 ] 吗? - james02
@james02 是的,这将测试名为 $somefile 的文件是否存在,尽管您应该始终引用您的变量 [ -f "$somefile" ] - Tom Fenech
1
两者都行!查看此bash引用的文章,获取有关在变量中使用引号的原因的更多信息。 - Tom Fenech

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接