Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 嵌套子外壳短路和set-e_Bash - Fatal编程技术网

Bash 嵌套子外壳短路和set-e

Bash 嵌套子外壳短路和set-e,bash,Bash,我没有遵循最后一种情况,为什么外部(关于最内部的子shell)&禁用最内部的设置-e选项?前面的案例显示,在没有&& 除此之外还有其他解决办法吗 a) $> ( echo 0 ; ( echo 1 ; false ; echo 2 ) ; echo 3 ) 0 1 2 3 b) $> ( echo 0 ; ( set -e ; echo 1 ; false ; echo 2 ) ; echo 3 ) 0 1 3 c) $> ( set -e ; echo 0 ; ( ech

我没有遵循最后一种情况,为什么外部(关于最内部的子shell)
&
禁用最内部的
设置-e
选项?前面的案例显示,在没有
&&

除此之外还有其他解决办法吗

a) $> ( echo 0 ; ( echo 1 ; false ; echo 2 ) ; echo 3 )
0
1
2
3

b) $> ( echo 0 ; ( set -e ; echo 1 ; false ; echo 2 ) ; echo 3 )
0
1
3

c) $> ( set -e ; echo 0 ; ( echo 1 ; false ; echo 2 ) ; echo 3 )
0
1

d) $> ( set -e ; echo 0 ; ( set -e ; echo 1 ; false ; echo 2 ) ; echo 3 )
0
1

e) $> ( set -e ; echo 0 ; ( set -e ; echo 1 ; false ; echo 2 ) && echo ok ; echo 3 )
0
1
2
ok
3

让我们不要在一个陌生的地方闲逛。你到底想完成什么?解决方法是不要期望
set-e
会以你想要的方式运行,而是自己进行错误检查。我认为这里的原因是你的内部
set-e
是多余的;子shell继承单个全局设置,因此在父shell中禁用它的任何东西(这里是
&&&
,per)也会在子shell中禁用它。但是在任何情况下,请参见。我们不要陷入一个错误。你到底想完成什么?解决方法是不要期望
set-e
会以你想要的方式运行,而是自己进行错误检查。我认为这里的原因是你的内部
set-e
是多余的;子shell继承单个全局设置,因此在父shell中禁用它的任何内容(此处为
&&
,per)也会在子shell中禁用它。但在任何情况下,请参阅。
$ ( set -e ; echo 0 ; ( { echo 1 && false && echo 2 ; } && echo ok ) || exit 1 ; echo 3 )
0
1