Mus*_*ful 1 bash exit-code built-in while-loop mkdir
我在bash函数中有这个代码片段:
while ! mkdir lock ; do
inotifywait -t $WAIT_TIMEOUT -e delete_self lock
done
local es=$?
if (( $es != 0 )); then
echo "Checkpoint A"
exit $es
fi
Run Code Online (Sandbox Code Playgroud)
我认为检查点A完全无法访问(因为成功的mkdir肯定是while循环终止时执行的最后一个命令).
但是,我发现有时会到达检查点A. 这怎么可能,即使原则上也是如此?
从http://pubs.opengroup.org/onlinepubs/9699919799/的第2.9.4节中可以看出while循环的退出状态:
while循环的退出状态应为执行的最后一个compound-list-2的退出状态,如果没有执行,则为零.
(这里,"compound-list-2"是do...donewhile循环部分内的命令.)因此,值$?将是上次执行inotifywait时返回的结果,如果从未调用则返回0.