Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 外壳函数的布尔返回值行为异常_Linux_Shell - Fatal编程技术网

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