ash: add support for bash 'function' keyword
Where the POSIX shell allows functions to be defined as:
name () compound-command [ redirections ]
bash adds the alternative syntax:
function name [()] compound-command [ redirections ]
Implement this in ash's bash compatibility mode. Most compound
commands work (for/while/until/if/case/[[]]/{}); one exception is:
function f (echo "no way!")
The other two variants work:
f() (echo "ok")
function f() (echo "also ok")
function old new delta
parse_command 1555 1744 +189
tokname_array 232 240 +8
.rodata 155612 155566 -46
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 197/-46) Total: 151 bytes
Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
committed by
Denys Vlasenko
parent
bc9bee01f3
commit
95ebcf79ff
28
shell/ash_test/ash-misc/func_bash1.tests
Executable file
28
shell/ash_test/ash-misc/func_bash1.tests
Executable file
@@ -0,0 +1,28 @@
|
||||
function f() { echo $1; }
|
||||
f 1
|
||||
|
||||
function f() ( echo $1; )
|
||||
f 2
|
||||
|
||||
function f() ( echo $1 )
|
||||
f 3
|
||||
|
||||
function f() for i in 1 2 3; do
|
||||
echo $i
|
||||
done
|
||||
f
|
||||
|
||||
function f { echo $1; }
|
||||
f 1
|
||||
|
||||
# the next two don't work
|
||||
#function f ( echo $1; )
|
||||
f 2
|
||||
|
||||
#function f ( echo $1 )
|
||||
f 3
|
||||
|
||||
function f for i in 1 2 3; do
|
||||
echo $i
|
||||
done
|
||||
f
|
||||
Reference in New Issue
Block a user