Bash:数组迭代并检查不返回

时间:2017-10-27 14:25:24

标签: arrays bash function iteration

我想创建一个迭代数组的bash函数,如果数组中不存在作为参数传递的元素,则返回0,否则返回1

但以下代码不会在stdout上打印任何内容。

function checkparsed {
  tocheck="$1"
  shift
  for item in $@
    do
      if [ "$item" = "$tocheck" ]; then
        return 0
      fi
  done
  return 1
}

mdfiles=('foo')
echo "$(checkparsed foo ${mdfiles[@]})"

2 个答案:

答案 0 :(得分:1)

这一行是问题所在:

echo "$(checkparsed foo ${mdfiles[@]})"

因为您的函数没有回显任何内容,但您返回的值为01

您实际上需要检查$?函数的返回值:

checkparsed foo ${mdfiles[@]}
echo $?

0

或者在条件评估中使用返回值:

checkparsed foo ${mdfiles[@]} && echo "found" || echo "not found"
found

checkparsed food ${mdfiles[@]} && echo "found" || echo "not found"
not found

答案 1 :(得分:1)

您正在捕获该函数的输出(没有)。

要打印01,请直接在echo函数中执行这些操作(不要忘记return),或在运行后使用echo $?功能。

要处理${mdfiles[@]}中元素中的空格和glob字符,您应该使用双引号:

for item in "$@"
# and
checkparsed foo "${mdfiles[@]}"