Bash 集合-e不尊重逻辑not
在几个shell中,逻辑不是!将反转程序的返回代码 但是,在具有set-e的shell脚本中,逻辑not似乎会导致程序实际上从未失败。为什么会这样 在bash、zsh和ksh中测试,结果相同 $cat test.sh set-ex 设置 触摸我的文件 观察可用文件 ls。 成功 ls-myfile;回声$? 这正如预期的那样成功 ! 公证文件;回声$? 当返回码明显为非零时,为什么不退出? ! ls-myfile;回声$? 当存在非零返回代码时,这将按预期退出 公证文件;回声$? 因为我们就在上面退出,所以永远不会执行 回声测试通过 结果: bash test.sh +触摸我的文件 +ls。 myfile test.sh +ls myfile 我的文件 +回声0 0 +符号文件 ls:无法访问“notafile”:没有此类文件或目录 +回声0 0 +ls myfile 我的文件 +回声1 1. +符号文件 ls:无法访问“notafile”:没有此类文件或目录Bash 集合-e不尊重逻辑not,bash,shell,zsh,ksh,Bash,Shell,Zsh,Ksh,在几个shell中,逻辑不是!将反转程序的返回代码 但是,在具有set-e的shell脚本中,逻辑not似乎会导致程序实际上从未失败。为什么会这样 在bash、zsh和ksh中测试,结果相同 $cat test.sh set-ex 设置 触摸我的文件 观察可用文件 ls。 成功 ls-myfile;回声$? 这正如预期的那样成功 ! 公证文件;回声$? 当返回码明显为非零时,为什么不退出? ! ls-myfile;回声$? 当存在非零返回代码时,这将按预期退出 公证文件;回声$? 因为我们就在上
这是指定的行为。从 如果失败的命令是紧跟在while或until关键字之后的命令列表的一部分、if语句中的测试的一部分、在&&或| |列表中执行的任何命令的一部分(除了最后一个&&或| | |之后的命令、管道中的任何命令,但最后一个命令除外),则shell不会退出,或者,如果命令的返回状态与!相反
这是指定的行为。从 如果失败的命令是紧跟在while或until关键字之后的命令列表的一部分、if语句中的测试的一部分、在&&或| |列表中执行的任何命令的一部分(除了最后一个&&或| | |之后的命令、管道中的任何命令,但最后一个命令除外),则shell不会退出,或者,如果命令的返回状态与!相反 这也是我的斜体字: 在执行while、if或elif保留字之后的复合列表时,应忽略-e设置,直到以开始的管道!保留字,或与或列表中除最后一个以外的任何命令 这也是我的斜体字: 在执行while、if或elif保留字之后的复合列表时,应忽略-e设置,直到以开始的管道!保留字,或与或列表中除最后一个以外的任何命令
在文档中,这是一个特别提到的例外。在决定使用set-e之前,这非常值得一读。在文档中,这是一个特别提到的例外。在决定使用set-e之前,这非常值得一读。这个问题不仅仅涉及GNU bash@AndrewHenle有正确的引用。bash引用基本上说了相同的事情,因为它遵循POSIX要求。在语义上仍然错误,而且它不利于在GNU/Linux世界中形成几乎垄断。这个问题不仅仅涉及GNU bash@AndrewHenle有正确的引用。bash引用基本上说了相同的事情,因为它遵循POSIX要求。在语义上仍然错误,并且它不能在GNU/Linux世界中形成几乎垄断。