循环失败后如何运行 2 个命令?

循环失败后如何运行 2 个命令?

我想写一个像这样的简单循环:

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

据我了解,它仅退出子 shell :-(

因此,我现在这样写:

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

但那太糟糕了……

除了调用运行这两个命令的函数之外我还能做什么?

答案1

使用花括号代替圆括号,这样不会产生新的子 shell:

... || { echo error; exit 1; }

请注意 - 与括号不同 - 即使在最后一条语句后也需要加上分号。

还请注意,我已经改为&&;我认为如果echo由于任何不太可能的原因而失败,您甚至应该退出;如果您真的希望在失败时继续循环,请随意将其改回来echo

相关内容