集成bash函数返回值

时间:2015-04-21 19:25:14

标签: bash

我有一个功能:

something() {
  if [ something ]; then
    echo "Something.";
    return 0;
  else
    echo "Not something.";
    return 1;
  fi
}

我在一个循环中调用它,它实际上验证了一些文件并计算有效文件的数量:

find . -type l | while read line ; do something "$line"; done

我需要计算有多少文件无效,因此函数返回的次数为0。我在想这个:

INVALID=0;
find . -type l | while read line ; do INVALID=$(($INVALID + something "$line")); done

毋庸置疑,bash并不买。请注意以下几点:

  • something中的信息必须打印在stdout
  • 信息打印并不总是与我的代码中的文件有效性相关联。这只是用户的信息。

1 个答案:

答案 0 :(得分:4)

返回值不能直接用于算术运算。您可以调用该函数然后访问$?,或者根据函数的结果进行分支,如下所示:

INVALID=0
while IFS= read -r line; do
    something "$line" || ((++INVALID))
done < <(find . -type l)

另请注意,您无法更改管道内的变量。管道在子壳中运行并具有自己的变量副本。您需要重新构建循环,以便在没有管道的情况下运行,以便对$INVALID进行更改:将find | loop更改为loop < <(find)

使用read -r禁用反斜杠转义并清除$IFS以更好地处理具有前导空格的行也是一个好主意。