bash:在不中断循环的情况下设置退出状态?
我正在编写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)
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保证语句之间的操作顺序?这并不像我期望的那样纯粹是功能性的