这会输出before\n
:
#!/usr/bin/env bash
set -e
echo before
((0))
echo after
删除set -e
或将((0))
更改为((1))
会使节目按预期输出before\nafter\n
。
为什么((0))
会触发set -e
退出条件?
答案 0 :(得分:9)
这将解释:
((0))
echo $?
1
((1))
echo $?
0
所以这是由于(( and ))
中的算术表达式评估的非零返回状态,当您使用set -e
时,您的脚本正在退出。
正如help set
所说:
-e如果命令以非零状态退出,则立即退出。
答案 1 :(得分:2)
行
set -e
表示:
-e Exit immediately if a command exits with a non-zero status.
(参见:https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html)
((0))
是一个评估为1
的表达式。这就是脚本退出的原因。