Linux 外壳函数的布尔返回值行为异常
我已经定义了这个函数(带有一些调试打印输出): 我是这样使用它的:Linux 外壳函数的布尔返回值行为异常,linux,shell,Linux,Shell,我已经定义了这个函数(带有一些调试打印输出): 我是这样使用它的: list="1 2" if listcontains "$list" 3; then echo Y; else echo N; fi 我期望N,但结果是Y,调试输出使它更奇怪: 3 = 1 ? 3 = 2 ? NO! Y 我做错了什么?在shell中,您使用0表示true(以及一些正数,即1,表示false)。这与脚本退出值的概念相同-在unix世界中,0意味着成功 因此,要修复此问题,只需反转返回值: listcontai
list="1 2"
if listcontains "$list" 3; then echo Y; else echo N; fi
我期望N,但结果是Y,调试输出使它更奇怪:
3 = 1 ?
3 = 2 ?
NO!
Y
我做错了什么?在shell中,您使用
0
表示true
(以及一些正数,即1
,表示false
)。这与脚本退出值的概念相同-在unix世界中,0
意味着成功
因此,要修复此问题,只需反转返回值:
listcontains() {
for item in $1
do
echo $2 = $item ?
if [ "$2" == "$item" ]; then
echo YES!
return 0;
fi
done
echo NO!
return 1
}
例如:
$ list="1 2"
$ if listcontains "$list" 3; then echo Y; else echo N; fi
3 = 1 ?
3 = 2 ?
NO!
N
$ list="1 3"
$ if listcontains "$list" 3; then echo Y; else echo N; fi
3 = 1 ?
3 = 3 ?
YES!
Y
$ list="1 2"
$ if listcontains "$list" 3; then echo Y; else echo N; fi
3 = 1 ?
3 = 2 ?
NO!
N
$ list="1 3"
$ if listcontains "$list" 3; then echo Y; else echo N; fi
3 = 1 ?
3 = 3 ?
YES!
Y