返回函数结果并使其适用于 if

返回函数结果并使其适用于 if

我想在函数中设置变量值,但也能够在 if 中使用它。args 数组是运行 bash 脚本时应用的参数args=("$@")

containsfilepath () {
  local e
  for e in "${@:1}"; do [[ "$e" =~ .*".out" ]] && return 0 && local $path="abc"; done
  return 1
}

所以我可以这样做

if containsfilepath "${args[@]}" ; then 

    echo "$path" "\n"
fi

我已经编写了代码但它不起作用,有什么想法吗?

答案1

本地路径语句中有一个额外的美元符号。试试这个:

containsfilepath () {
  local e
  for e in "${@:1}"; do [[ "$e" =~ .*".out" ]] && return 0 && local path="abc"; done
  return 1
}

在这段代码中,由于return 0执行了path到达赋值语句后,该语句从未path被赋值。如果希望将 path 赋值给稍后可访问的值,则需要反转语句并local删除限定符。尝试:

containsfilepath () {
  local e
  for e in "${@:1}"
  do
      [[ "$e" =~ .*".out" ]] && { path="abc"; return 0; }
  done
  return 1
}

相关内容