我的条件似乎总是被评估为真。
#!/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"
为什么它在我的脚本中不起作用?
答案 0 :(得分:4)
$?
是上次执行命令的退出代码。在您的情况下,上次执行的命令是echo
,而不是checkFolder
。
如果要在运行命令和检查其状态之间执行其他命令,请将其分配给myvar=$?
答案 1 :(得分:1)
命令return
的变化是函数的“退出代码”
加上这个:
checkFolder "$rootFolder"
echo "the exit code was $?"
并查看return 0
和return 1
的效果。