a returns 5
b returns 4
c returns 3
d returns 2
in e
e returned 25
x is 25
ZZ
abcde
defghi
ZZ
5
0
AVAR
AVAR
foo
foo
AVAR
5
5
f1
f1 () 
{ 
    ( return 5 );
    status=$?;
    echo $status;
    return $status
}
before: try to assign to FUNCNAME
outside: FUNCNAME =
before: FUNCNAME = func
FUNCNAME = func2
after: FUNCNAME = func
outside2: FUNCNAME =
function
zf is a function
zf () 
{ 
    echo this is zf
}
f is a function
f () 
{ 
    echo f-x;
    echo f-y
} 1>&2
subshell
f is a function
f () 
{ 
    echo f-x;
    echo f-y
} 1>&2
f2 is a function
f2 () 
{ 
    echo f2-a;
    function f3 () 
    { 
        echo f3-a;
        echo f3-b
    } 1>&2;
    f3
}
subshell
f2 is a function
f2 () 
{ 
    echo f2-a;
    function f3 () 
    { 
        echo f3-a;
        echo f3-b
    } 1>&2;
    f3
}
f4 is a function
f4 () 
{ 
    echo f4-a;
    function f5 () 
    { 
        echo f5-a;
        echo f5-b
    } 1>&2;
    f5
} 2>&1
subshell
f4 is a function
f4 () 
{ 
    echo f4-a;
    function f5 () 
    { 
        echo f5-a;
        echo f5-b
    } 1>&2;
    f5
} 2>&1
testgrp is a function
testgrp () 
{ 
    echo testgrp-a;
    { 
        echo tg-x;
        echo tg-y
    } 1>&2;
    echo testgrp-b
}
subshell
testgrp is a function
testgrp () 
{ 
    echo testgrp-a;
    { 
        echo tg-x;
        echo tg-y
    } 1>&2;
    echo testgrp-b
}
funca is a function
funca () 
{ 
    ( echo func-a )
}
funcb is a function
funcb () 
{ 
    ( echo func-b )
}
funcc is a function
funcc () 
{ 
    ( echo func-c ) 2>&1
}
func-a
func-b
func-c
foo-bar
foo-bar () 
{ 
    :
}
expect 5 10
5 10
expect 20
20
expect 5 20
5 20
expect 5 20
5 20
expect 2 40
2 40
expect 5 20
5 20
./func4.sub: line 23: foo: maximum function nesting level exceeded (100)
1
after: f = 100
./func4.sub: line 23: foo: maximum function nesting level exceeded (100)
1
after: f = 100
7
after FUNCNEST reset: f = 201
7
after FUNCNEST unset: f = 201
./func4.sub: line 23: foo: maximum function nesting level exceeded (20)
1
after FUNCNEST assign: f = 38
./func5.sub: line 31: `sys$read': not a valid identifier
11111 () 
{ 
    printf "FUNCNAME: %s\n" $FUNCNAME
}
function a=2 () 
{ 
    printf "FUNCNAME: %s\n" $FUNCNAME
}
11111 () 
{ 
    printf "FUNCNAME: %s\n" $FUNCNAME
}
function a=2 () 
{ 
    printf "FUNCNAME: %s\n" $FUNCNAME
}
FUNCNAME: a=2
<(:)
<(:) is a function
<(:) () 
{ 
    echo $FUNCNAME
}
posix mode:
type
break is a special shell builtin
builtin
command -v
break
command -V
break is a special shell builtin
type -a
break is a special shell builtin
break is a function
break () 
{ 
    echo inside function $FUNCNAME
}
declare
break () 
{ 
    echo inside function $FUNCNAME
}
execution
default mode:
type
break is a function
break () 
{ 
    echo inside function $FUNCNAME
}
function
command -v
break
command -V
break is a function
break () 
{ 
    echo inside function $FUNCNAME
}
type -a
break is a function
break () 
{ 
    echo inside function $FUNCNAME
}
break is a shell builtin
declare
break () 
{ 
    echo inside function $FUNCNAME
}
execution
inside function break
./func5.sub: line 86: `break': is a special builtin
!! is a function
!! () 
{ 
    fc -s "$@"
}
!! is a function
!! () 
{ 
    fc -s "$@"
}
5
rfunc () 
{ 
    local -;
    local var;
    local -p
}
declare -fr rfunc
