bash:在不中断循环的情况下设置退出状态?

bash:在不中断循环的情况下设置退出状态?,bash,Bash,我正在编写bash脚本来检查fstab结构 在for循环中,我放置了一个return语句,以便稍后在脚本中使用退出代码,但似乎return语句在打印第一个请求的输出后打破了循环 如何在不中断循环的情况下分配返回码1,以便获得所有结果,而不仅仅是第一个结果 for i in $(printf "$child"|awk '/'$new_mounts'/'); do chid_count=$(printf "$child"|awk '/'$new_mounts'/'|wc -l)

我正在编写bash脚本来检查
fstab
结构

for
循环中,我放置了一个
return
语句,以便稍后在脚本中使用退出代码,但似乎
return
语句在打印第一个请求的输出后打破了循环

如何在不中断循环的情况下分配返回码1,以便获得所有结果,而不仅仅是第一个结果

for i in $(printf  "$child"|awk '/'$new_mounts'/'); do

    chid_count=$(printf  "$child"|awk '/'$new_mounts'/'|wc -l)

    if [[ $chid_count -ge 1 ]]; then
        echo -e "\e[96mfstab order check failed: there are child mounts before parent mount:\e[0m"
        echo -e "\e[31mError: \e[0m "$child"\e[31m  mount point, comes  before \e[0m $mounts \e[31m on fstab\e[0m"
        return 1
    else
        return 0
    fi
done

如果您阅读了该语言的文档,那么return应该立即返回。这并不是shell所独有的——事实上,我想不出有哪种语言的
return
结构不是这样的

如果要设置稍后用作返回值的值,请使用变量:

yourfunc() {
  local retval=0

  for i in ...; do
    (( child_count >= 1 )) && retval=1
  done

  return "$retval"
}

…顺便说一句,
'/'$new_mounts'/'
是非常非常错误的-它将
new_mounts
的内容拆分为字符串,而不是将其作为单个参数的一部分传递给awk<代码>“/$new\u mounts/”将是一种改进。考虑将您的代码通过,并仔细阅读……类似地,任何shell,在代码< > ECH-E>代码>中,除了打印“代码> > E<代码>之外,它的输出不符合POSIX SH标准——参见ECHX的POSIX规范。考虑使用PrtTf替代,它允许一个标准兼容的、可移植的工具进行可比较的任务。诱使标记为重复的,但是我只会重复我在答案中所写的:使用AWK。@ TrPiLee,…,这确实是对更大问题(与当前语言水平问题相反)的一个非常精确的答案。当您的目标是迭代输出行时,
for i in$(…)
实际上并不是该作业的最佳工具。请参阅,和/或(有关关注最佳实践方法的内容)。Haskell的
return
没有:)@chepner,Haskell保证语句之间的操作顺序?这并不像我期望的那样纯粹是功能性的