Bourne | Ash | #! | find | ARG_MAX | Shells | whatshell | portability | permissions | UUOC | ancient | - | ../Various | HOME
"$@" | echo/printf | set -e | test | tty defs | tty chars | $() vs ) | IFS | using siginfo | nanosleep | line charset | locale


"set -e" in various shells

2015年10月15日 (see recent changes)

Variations in the handling of set -e and the resulting exit status among the various traditional and POSIX conformant implementations.

Here are deep links to the definition in SUSv2, SUSv3, SUSv4.
See a discussion (and the topic igniting it a few days before) about this on the Austin Group (SUS/POSIX) discussion mailing list archive, starting on Feb 16 2009
with consensus that the wording has to be improved to become more consistent and to match existing practice.
See entry 0000537 (and the related 0000052) in the Austin Group Issue Tracker.

Possible questions about set -e:

Using set -e has its quirks. As alternative, you can connect your commands with &&, or break out with ||alternative_cmd in critical places.

The following table lists tests results, most of them originate from or are inspired by the austin list.
Take the columns as pairs, with the shell output to the left and the exit status $? to the right.
A second table with tests suggested by David Korn on the austin-list follows below. The two tables eventually should be merged.

commandline V7-sh $? SVR2
sh
ultrix $? SVR3
sh
sun413 $? SVR4
sh
sun5.1 $? SVR4
sh
sun5.10 $? ksh86a
ep/ix $? ksh88d
ep/ix $? ksh88g
sun53 $? ksh88i
sun5.9 $? ksh93
-k $? ksh93
-t $? pdksh
-5.2.14 $? posh-
0.6.17 $? hist.
ash $? bash-
1.05 $? bash-
1.14.0 $? bash-
1.14.7 $? bash-
3.2.48 $? bash-
3.2.48
--posix $? bash-
4.0.35 $? bash-
4.0.35
--posix $? dash-
0.3.4 $? dash-
0.3.8 $? dash-
0.5.5.1 $? dash-
0.5.5.1
-4 $? zsh-
3.0.8 $? zsh-
4.3.9 $?
false; echo $? 1 1 255 255 255 1 1 1 1 1 1 1 1 1 1 0 255 1 1 1 1 1 1 1 1 1 1 1
set +e; false; echo $? 1 1 0 255 0 255 0 255 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 255 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
! false; echo $? N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 0 0 0 0 0 0 0 0 0 0 N/A 2 N/A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
! true ; echo $? N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 1 0 1 0 1 0 1 1 N/A 2 N/A 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 1
! ! false ; echo $? N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 1 0 1 0 1 0 1 1 N/A 2 N/A 0 N/A 1 N/A 1 N/A 2 N/A 2 N/A 2 N/A 2 1 N/A 2 N/A 2 N/A 2 N/A 0 N/A 1
(false; echo foo); echo \ $? 1 1 255 255 255 1 1 1 1 1 1 1 1 0 1 foo 0 0 255 0 139 1 0 1 0 1 1 1 1 0 1 0 1 1 1
(! false; echo foo); echo \ $? N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 N/A 2 N/A 0 foo 0 0 139 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0
(! true; echo foo); echo \ $? N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 foo 0 0 foo 0 0 foo 0 0 1 1 0 N/A 2 N/A 0 foo 0 0 139 foo 0 0 foo 0 0 foo 0 0 foo 0 0 1 foo 0 0 foo 0 0 foo 0 0 1 1
for i in .; do (false; echo foo); echo \ 1:$?; done; echo \ 2:$? 1 1 255 255 255 1 1 1 1 1 1 1 1:1 2:0 0 1 foo 1:0 2:0 0 1:255 2:0 0 139 1:1 2:0 0 1:1 2:0 0 1 1 1 1:1 2:0 0 1:1 2:0 0 1 1 1
for i in .; do false && true; echo \ 1:$?; done; echo \ 2:$? 1 1:1 2:0 0 1:255 2:0 0 1:255 2:0 0 1:255 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1 1:1 2:0 0 1:255 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0
for i in x x ; do echo x; false && true; done; echo \ 2:$? x 1 xx 2:1 0 xx 2:255 0 xx 2:255 0 xx 2:255 0 ? ? ? ? xx 2:1 0 xx 2:1 0 xx 2:1 0 xx 2:1 0 x 1 x 1 x 1 xx 2:0 0 xx 2:255 0 xx 2:1 0 xx 2:1 0 xx 2:1 0 xx 2:1 0 xx 2:1 0 x 1 xx 2:1 0 xx 2:1 0 xx 2:1 0 xx 2:1 0 xx 2:1 0
false| true; echo $? 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
true | false; echo $? 1 1 255 255 255 1 1 0 1 1 1 1 1 1 1 1 0 255 1 1 1 1 1 1 1 1 1 1 1
true |(false; echo foo); echo \ $? 1 1 255 255 255 1 1 0 1 1 1 1 1 1 1 foo 0 0 255 0 139 1 0 1 0 1 1 1 1 1 1 1 1
(false; echo foo) | cat ; echo \ $? 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 foo 0 0 0 0 139 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
(false; echo foo) || echo bar; echo \ $? 1 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 bar 0 0 foo 0 0 foo 0 0 139 foo 0 0 foo 0 0 foo 0 0 foo 0 0 bar 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0
(set -e; false; echo foo) || echo bar; echo \ $? 1 foo 0 0 foo 0 0 foo 0 0 bar 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 bar 0 0 foo 0 0 foo 0 0 139 foo 0 0 foo 0 0 foo 0 0 foo 0 0 bar 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0
{ false; echo foo;}| cat ; echo \ $? 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 foo 0 0 0 0 139 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
{ false; echo foo;}|| echo bar; echo \ $? 1 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 1 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 1 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0
{ set -e; false; echo foo;}|| echo bar; echo \ $? 1 foo 0 0 foo 0 0 foo 0 0 255 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 1 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 1 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0
echo foo | while read x ; do (false) ; done; echo $? 1 1 255 255 255 1 1 0 1 1 1 1 1 1 1 0 0 255 0 139 1 0 1 0 1 1 1 1 1 1 1 1
echo foo | while read x ; do (false) ; done | true; echo $? 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 139 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
true && false; echo $? 1 1 255 255 255 1 0 1 1 1 1 1 1 1 1 1 0 255 1 1 1 1 1 1 1 1 1 1 1
false && false; echo $? 1 1 0 255 0 255 0 255 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 255 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
false && true; echo $? 1 1 0 255 0 255 0 255 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 255 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
false || echo $? 1 1 0 255 0 255 0 255 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 255 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
false || true; echo $? 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
false || false; echo $? 1 1 255 255 255 1 0 1 1 1 1 1 1 1 1 1 0 255 1 1 1 1 1 1 1 1 1 1 1
false `true` || echo $? 1 1 255 255 255 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 255 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
(false && false; echo foo) ; echo \ $? 1 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 1 foo 0 0 foo 0 0 139 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0
(false && false ) ; echo \ $? 1 1 255 255 255 1 1 1 1 1 1 1 1 0 1 1 0 255 0 139 1 0 1 0 1 1 1 1 0 1 0 1 1 1
if false; then :; else echo \ 1:$?; fi; echo \ 2:$? 1 1:1 2:0 0 1:255 2:0 0 1:255 2:0 0 1:255 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:255 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0
if false; then :; else false; echo foo; fi; echo \ 2:$? 1 1 255 255 255 foo 2:0 0 1 1 1 1 1 1 1 1 foo 2:0 0 255 1 1 1 1 1 1 1 1 1 1 1
if ! false; then :; else echo \ 1:$?; fi; echo \ 2:$? N/A 1 N/A 1 N/A 0 N/A 0 N/A 0 N/A 0 N/A 0 N/A 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 N/A 0 N/A 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0
if ! false; then :; else false; echo foo; fi; echo \ 2:$? N/A 1 N/A 1 N/A 255 N/A 255 N/A 255 N/A 0 N/A 1 N/A 1 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 N/A 1 N/A 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0
if `false`; then :; else echo \ 1:$?; fi; echo \ 2:$? 1 1 255 255 255 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 2:0 0 1:1 2:0 0 1:255 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 1:1 2:0 0 2:0 0 1:1 2:0 0
if `false`; then :; else false; echo foo; fi; echo \ 2:$? 1 1 255 255 255 foo 2:0 0 1 1 1 1 1 1 1 2:0 0 foo 2:0 0 255 1 1 1 1 1 1 1 1 1 2:0 0 1
if true; then false; echo foo; fi; echo \ 2:$? 1 1 255 255 255 foo 2:0 0 1 1 1 1 1 1 1 1 foo 2:0 0 255 1 1 1 1 1 1 1 1 1 1 1
if ! true; then false; echo foo; fi; echo \ 2:$? N/A 1 N/A 1 N/A 0 N/A 0 N/A 0 N/A 0 N/A 0 N/A 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 N/A 2 N/A 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0 2:0 0
if true; then : `false`; fi; echo $? 1 1 255 255 255 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
if true; then : `false`; echo foo; fi; echo \ $? 1 1 255 255 255 foo 0 0 1 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0
echo `false; echo foo`; echo \ $? 1 1 255 255 255 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 foo 0 0 0 0 foo 0 0 foo 0 0 0 0 foo 0 0 0 0 0 0 foo 0 0 foo 0 0 foo 0 0 0 0 0 0
f() { false; echo foo; }; f; echo \ $? N/A 2 1 255 255 255 1 1 1 1 1 1 1 1 1 foo 0 0 255 1 1 1 1 1 1 1 1 1 1 1
f() { false; echo foo; }; f || echo foo2; echo \ $? N/A 2 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 1 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 1 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0
f() { false && false; echo foo; }; f; echo \ $? N/A 2 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 1 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0
f() { false && true ; }; f; echo \ $? N/A 2 1 0 255 0 255 0 255 0 1 1 1 1 1 1 1 1 1 1 0 255 1 1 1 1 1 1 1 1 1 1 0 1 0
f() { false && false; }; f; echo \ $? N/A 2 1 0 255 0 255 0 255 0 1 1 1 1 1 1 1 1 1 1 0 255 1 1 1 1 1 1 1 1 1 1 0 1 0
f() { false && true; }; eval f; echo \ $? N/A 2 1 0 255 0 255 0 255 0 1 1 1 1 1 1 1 1 1 0 0 255 1 1 1 1 1 1 1 1 1 1 0 1 0
f() { false && false; }; eval f; echo \ $? N/A 2 1 0 255 0 255 0 255 0 1 1 1 1 1 1 1 1 1 0 0 255 1 1 1 1 1 1 1 1 1 1 0 1 0
eval 'false && true; echo foo'; echo \ $? 1 foo 0 0 255 0 255 0 255 0 foo 0 0 foo 0 0 1 1 1 foo 0 0 foo 0 0 foo 0 0 1 foo 0 0 255 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 foo 0 0 1 0 foo 0 0
. ./to_source; echo $? # to_source: "false && true" 1 1 0 255 0 255 0 255 0 1 1 1 1 1 1 1 1 1 0 0 255 1 1 1 1 1 1 1 1 1 1 0 1 0
trap echo\ \$\? 0; (exit 2); exit 1 0 0 0 0 0 0 2 0 2 2 2 2 2 2 2 2 2 2 0 2 2 2 2 2 1 1 2 2 21 0 1 1 0 139 1 1 1 1 2 2 2 2 2 2 1 1 1 1 2 2 2 2 2 2
commandline V7-sh $? SVR2
sh
ultrix $? SVR3
sh
sun413 $? SVR4
sh
sun5.1 $? SVR4
sh
sun5.10 $? ksh86a
ep/ix $? ksh88d
ep/ix $? ksh88g
sun53 $? ksh88i
sun5.9 $? ksh93
-k $? ksh93
-t $? pdksh
-5.2.14 $? posh-
0.6.17 $? hist.
ash $? bash-
1.05 $? bash-
1.14.0 $? bash-
1.14.7 $? bash-
3.2.48 $? bash-
3.2.48
--posix $? bash-
4.0.35 $? bash-
4.0.35
--posix $? dash-
0.3.4 $? dash-
0.3.8 $? dash-
0.5.5.1 $? dash-
0.5.5.1
-4 $? zsh-
3.0.8 $? zsh-
4.3.9 $?

About the table:

  • N/A means: The feature (! negation, or functions) is not available, which results in a message like "command not found" or "syntax error".
  • ? means that I have no result for this test yet.
  • Some shells are not listed explicitly, because the results were identical to a related shell in the table:
    • the results of sh-sunos5.5, sh-sunos5.9, sh-heirloom050706 and sh-schily are identical to sh-sunos5.10
    • the results of xpg4-ksh-sunos5.9 are identical to ksh88i-sunos5.9
    • the results of bash-1.14.7 are the same if called in posix-mode
    • the results of bash-2.05a, bash-2.05b and bash-3.0 are identical to bash-3.2.48
    • the results of bash-2.05a, bash-2.05b and bash-3.0 in posix-mode are identical to bash-3.2.48 in posix-mode
    • the results of bash-4.1.0 are identical to bash-4.0.35
    • the results of dash-0.4.6, dash-0.4.26 and dash-0.5.3 are identical to dash-0.5.5.1
    • the results of zsh-4.3.9 are the same if called as sh-4.3.9
    • the results of zsh-3.0.8 are identical to zsh-4.0.4
    • the results of posh-0.6.17 are the same if called in posix-mode, and posh.0.5.4 behaves identical
  • In traditional Bourne shells since SVR1 (with the exceptions where fixed) "set -e" must be the last command in a line, because it doesn't show effect until the next line.
  • The V7 shell behaves rather different, because basic fixes about set -e were added later.
  • The results were collected with a method like this
     $ cat tests
     false; echo $?
     set +e; false; echo $?
     [...]
     $ cat loop
     while IFS= read -r line ; do
     {print HTML}
     for i in {shells}
     do
     log=`$i -ec "$line" 2>&1`
     ret=$?
     log=`printf '%s' "$log"|tr -d '\n'`
     printf {HTML with "$log" and "$ret"}
     done
     done < tests
    

    ...and then piped through sed to substitute "N/A" for the error messages.
    The very script is longer, because results from different systems have to get interspersed
    and a few shells (e.g. ksh86a, historical ash, bash-1.05) have to be called slightly different.


Here is a table with results for the tests suggested by D. Korn on the austin-list.

commandline V7-sh $? svr2-sh
ultrix $? svr3-sh
sun-413 $? svr4-sh
sun-5.1 $? svr4-sh
sun-5.10 $? ksh86a
ep/ix $? ksh88d
ep/ix $? ksh88g
sun-53 $? ksh88i-
sun-5.9 $? ksh93-k $? ksh93-t $? pdksh-
5.2.14 $? posh-
0.6.17 $? hist.
ash $? bash-
1.14.0 $? bash-
1.14.7 $? bash-
4.0.35 $? bash-
4.0.35
--posix $? dash-
0.3.4 $? dash-
0.3.8 $? dash-
0.5.5.1 $? dash-
0.5.5.1
-4 $? zsh-
4.3.9 $?
$SHELL -ec "false;true" && echo "1" 1 1 255 255 255 1 1 1 1 1 1 1 1 1 255 1 1 1 1 1 1 1 1
$SHELL -ec "! true;true" && echo "2" N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 N/A 1 2 0 2 0 2 0 1 1 N/A 2 2 0 2 0 2 0 2 0 1 2 0 2 0 2 0 1
$SHELL -ec "if false;false;then true;fi" || echo "3" 1 0 0 0 3 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 3 0 0 0 0 0
$SHELL -ec "if false;then echo bar3;elif false;then true;fi" || echo "4" 1 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0
$SHELL -ec "while false; true;do break;done" || echo "5" 1 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 5 0 0 0 0 0
$SHELL -ec "until false;do break;done" || echo "6" 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
$SHELL -ec "until ! true ;do break;done" || echo "7" N/A 1 N/A 0 N/A 0 N/A 0 N/A 0 N/A 0 N/A 0 N/A 0 0 0 0 0 0 N/A 0 0 0 0 0 0 0 0 0 0
$SHELL -ec "false || true" || echo "8" 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
$SHELL -ec "false || false" && echo "9" 1 1 255 255 255 1 1 1 1 1 1 1 1 1 255 1 1 1 1 1 1 1 1
$SHELL -ec "false || { false;true;}" && echo "10" 1 1 255 255 255 10 0 1 1 1 1 1 1 1 1 255 1 1 1 1 1 1 1 1
$SHELL -ec "{ false;true;} || { false;true;}" || echo "11" 1 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 11 0 0 0 0 0
$SHELL -ec "(false);true" && echo "12" 1 1 255 255 255 1 1 1 1 1 1 1 12 0 1 12 0 139 1 1 1 12 0 12 0 1 1
$SHELL -ec "exec 2>/dev/null;true> .;true" || echo "13" sh-v7-vladov: .: cannot open 1 13 0 13 0 13 0 13 0 13 0 13 0 13 0 13 0 13 0 13 0 13 0 13 0 13 0 13 0 13 0 13 0 13 0 13 0 13 0 13 0 13 0 13 0
$SHELL -ec "false | true" || echo "14" 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
$SHELL -ec "true | false" && echo "15" 1 1 255 255 255 1 1 1 1 1 1 1 1 1 255 1 1 1 1 1 1 1 1
$SHELL -ec "while true;do false;break;done" && echo "16" 1 1 255 255 255 16 0 1 1 1 1 1 1 1 1 255 1 1 1 1 1 1 1 1
$SHELL -ec "f(){ false;};f" && echo "17" N/A 2 1 255 255 255 1 1 1 1 1 1 1 1 1 255 1 1 1 1 1 1 1 1
$SHELL -ec "f()(false);f" && echo "18" N/A 2 1 255 255 255 N/A 2 1 1 1 1 1 1 1 1 N/A 1 N/A 1 1 1 1 1 1 1 1
$SHELL -ec "f(){ false;true;};f" && echo "19" N/A 2 1 255 255 255 1 1 1 1 1 1 1 1 1 255 1 1 1 1 1 1 1 1
$SHELL -ec "f()(false;true);f" && echo "20" N/A 2 1 255 255 255 N/A 2 1 1 1 1 1 1 1 1 N/A 1 N/A 1 1 1 1 1 1 1 1
$SHELL -ec "f(){ false;true;};f && true" || echo "21" N/A 2 0 0 0 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 21 0 0 0 0 0
$SHELL -ec "f()( false;true);f && true" || echo "22" N/A 2 0 0 0 0 N/A 0 0 0 0 0 0 0 0 22 0 N/A 0 N/A 0 0 0 22 0 0 0 0 0
$SHELL -ec "f(){ set -e;false;true;};f && true" || echo "23" N/A 2 0 0 0 23 0 0 0 0 0 0 0 0 0 23 0 0 0 0 0 23 0 0 0 0 0
$SHELL -ec "f()( set -e;false;true);f && true" || echo "24" N/A 2 0 0 0 24 0 N/A 0 0 0 0 0 0 0 0 24 0 N/A 0 N/A 0 0 0 24 0 0 0 0 0
[ "$($SHELL -ec "{ false;echo foo;} | cat")" = '' ] || echo "25" N/A 2 N/A 2 N/A 2 N/A 2 N/A 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[ "$($SHELL -ec "f(){ false;echo foo;}; f | cat")" = '' ] || echo "26" N/A 2 N/A 2 N/A 2 N/A 2 N/A 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[ "$($SHELL -ec "f()(false;echo foo); f | cat")" = '' ] || echo "27" N/A 2 N/A 2 N/A 2 N/A 2 N/A 2 N/A 0 0 0 0 0 0 0 0 0 N/A 0 N/A 0 0 0 0 0 0 0 0
$SHELL -ec "! true | false" || echo "28" N/A 1 N/A 0 N/A 0 N/A 0 N/A 0 N/A 0 N/A 0 N/A 0 0 0 0 0 0 N/A 0 28 0 28 0 0 0 28 0 0 0 0 0
$SHELL -ec "! true | true;true" && echo "29" N/A 1 N/A 0 N/A 0 N/A 0 N/A 0 N/A 0 N/A 0 N/A 0 29 0 29 0 29 0 1 1 N/A 0 29 0 29 0 29 0 29 0 29 0 29 0 29 0 29 0 1
$SHELL -ec "! { true | true;};true" && echo "30" N/A 2 N/A 2 N/A 2 N/A 2 N/A 2 N/A 2 N/A 2 N/A 2 30 0 30 0 30 0 1 1 N/A 2 30 0 30 0 30 0 30 0 1 30 0 30 0 30 0 1
$SHELL -ec "true | { false;};true" && echo "31" 1 1 255 255 255 1 31 0 1 1 1 1 1 1 1 31 0 139 1 1 1 1 1 1 1
commandline V7-sh $? svr2-sh
ultrix $? svr3-sh
sun-413 $? svr4-sh
sun-5.1 $? svr4-sh
sun-5.10 $? ksh86a
ep/ix $? ksh88d
ep/ix $? ksh88g
sun-53 $? ksh88i-
sun-5.9 $? ksh93-k $? ksh93-t $? pdksh-
5.2.14 $? posh-
0.6.17 $? hist.
ash $? bash-
1.14.0 $? bash-
1.14.7 $? bash-
4.0.35 $? bash-
4.0.35
--posix $? dash-
0.3.4 $? dash-
0.3.8 $? dash-
0.5.5.1 $? dash-
0.5.5.1
-4 $? zsh-
4.3.9 $?


Comments to <mascheck@in-ulm.de>
<http://www.in-ulm.de/~mascheck/various/set-e/>

AltStyle によって変換されたページ (->オリジナル) /