Bash条件总是在脚本中评估为true

时间:2015-10-28 22:49:18

标签: bash function conditional-statements

我的条件似乎总是被评估为真。

#!/bin/bash

checkFolder() {
    echo "[checkFolder]"
    echo "check $1"
    [ -n "$1" ] && [ -d "$1" ] && return 0
    echo "[/checkFolder]"
    return 1
}

rootFolder=$1

echo "check $rootFolder"
checkFolder "$rootFolder"
echo "res: $res"   # !! <--- I omitted this test line, as I thought it was irrelevant. 
echo "ret: $?"

当我执行我的脚本时,任何路径都会给我一个返回值0.这意味着我提供的任何字符串似乎都被视为非空以及现有目录。我尝试过:

./myScript.sh "."
./myScript.sh ""
./myScript.sh "wqert"

我将离开得到的返回值为0.怎么来的? 如果我在终端中运行此命令:

param=""
[ -n "$param" ] && [ -d "$param" ] && echo ok
# returns nothing

param="hello"
[ -n "$param" ] && [ -d "$param" ] && echo ok
# returns nothing

param="/home"
[ -n "$param" ] && [ -d "$param" ] && echo ok
# returns "ok"

为什么它在我的脚本中不起作用?

2 个答案:

答案 0 :(得分:4)

$?是上次执行命令的退出代码。在您的情况下,上次执行的命令是echo,而不是checkFolder

如果要在运行命令和检查其状态之间执行其他命令,请将其分配给myvar=$?

的变量

答案 1 :(得分:1)

命令return的变化是函数的“退出代码” 加上这个:

 checkFolder "$rootFolder"
 echo "the exit code was $?"

并查看return 0return 1的效果。