我使用脚本利用的系统set -e
:
#!/bin/sh
set -e
echo 1
true
echo 2
true
echo 3
false
echo notreached
如果我这样做:
#!/bin/sh
set -e
echo 1
true
echo 2
true
echo 3
! false
echo reached
...到达最后一行。但是,如果我这样做:
#!/bin/sh
set -e
echo 1
true
echo 2
true
echo 3
! true
echo reached
...到达最后一行,即使! true
应该是false
.
更多测试:
user@linux:~$ ! false && echo ok
ok
user@linux:~$ ! true && echo ok
user@linux:~$
...所以在这些情况下,!
操作员可以正常工作。
但是,它不能与set -e
. 为什么?
相关: http: //mywiki.wooledge.org/BashFAQ/105 ...虽然这不能回答我的问题。
因为这就是标准所说的:
http://pubs.opengroup.org/onlinepubs/9699919799.2018edition/utilities/V3_chap02.html#set
Bash 的手册也指出了这一点,但措辞略有不同。
我认为 BashFAQ 中的条目甚至没有试图说明细节,“这些规则非常复杂”这句话很清楚。虽然链接的页面似乎有不止一个人想知道。