我想写一个这样的简单循环:
for f in my_file0 my_file1 my_file2; do
(( $(find . -name $f | wc -l > 0 ))
done
但是,我希望循环在失败时中断脚本并打印错误消息,所以我这样做了:
for f in my_file0 my_file1 my_file2; do
(( $(find . -name $f | wc -l > 0 )) || echo error && exit 1
done
显然,它在第一次迭代时退出。
所以,我继续使用这个解决方案
for f in my_file0 my_file1 my_file2; do
(( $(find . -name $f | wc -l > 0 )) || (echo error && exit 1)
done
据我了解,它只退出子外壳:-(
所以,现在我这样写:
for f in my_file0 my_file1 my_file2; do
(( $(find . -name $f | wc -l > 0 ))
if (( $? > 0 )); then echo error && exit 1; fi
done
但这很糟糕……
除了调用将运行这两个命令的函数之外,我还能做什么?
使用花括号而不是括号,这样不会产生新的子外壳:
请注意 - 与括号不同 - 即使在最后一条语句之后,您也需要放置一个分号。
另请注意,我已更改
&&
为,我认为如果由于任何不太可能的原因失败,;
您甚至应该退出;如果您真的希望在失败echo
时继续循环,请随时将其更改回来。echo