我在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
我认为检查点A完全无法访问(因为成功的mkdir肯定是while循环终止时执行的最后一个命令)。
但是,我发现有时会到达检查点A.这怎么可能,即使原则上也是如此?
答案 0 :(得分:5)
来自http://pubs.opengroup.org/onlinepubs/9699919799/的2.9.4节关于while循环的退出状态:
while循环的退出状态应为最后一个的退出状态 执行复合列表-2,如果没有执行则为零。
(这里,“compound-list-2”是while循环的do...done
部分内的命令。)因此$?
的值将是上次执行inotifywait时返回的结果,如果从未被调用过,则为零。