我已定义此功能(带有一些调试打印输出):
listcontains() {
for item in $1
do
echo $2 = $item ?
if [ "$2" == "$item" ]; then
echo YES!
return 1;
fi
done
echo NO!
return 0
}
我正在使用它:
list="1 2"
if listcontains "$list" 3; then echo Y; else echo N; fi
我期待N,但结果是Y,调试输出使它更奇怪:
3 = 1 ?
3 = 2 ?
NO!
Y
我做错了什么?
答案 0 :(得分:1)
在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