* doc/autoconf.texi (Shell Functions): Document ksh93 limitation.

Signed-off-by: Eric Blake <[email protected]>
---

I'm pushing both of these.

 ChangeLog         |    5 +++++
 doc/autoconf.texi |   28 +++++++++++++++++++++-------
 2 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 2cbd690..3d3ace6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2010-08-03  Eric Blake  <[email protected]>
+
+       docs: mention ksh bug with function syntax
+       * doc/autoconf.texi (Shell Functions): Document ksh93 limitation.
+
 2010-08-03  Ralf Wildenhues  <[email protected]>

        Fix typo in Autotest color test, for dash testsuite failure.
diff --git a/doc/autoconf.texi b/doc/autoconf.texi
index df0e298..e292062 100644
--- a/doc/autoconf.texi
+++ b/doc/autoconf.texi
@@ -16202,6 +16202,20 @@ Shell Functions
 Nowadays, it is difficult to find a shell that does not support
 shell functions at all.  However, some differences should be expected.

+When declaring a shell function, you must include whitespace between the
+...@samp{)} after the function name and the start of the compound
+expression, to avoid upsetting @command{ksh}.  While it is possible to
+use any compound command, most scripts use @sa...@{@dot...@}}.
+
+...@example
+$ @kbd{/bin/sh -c 'a()@{ echo hi;@}; a'}
+hi
+$ @kbd{ksh -c 'a()@{ echo hi;@}; a'}
+ksh: syntax error at line 1: `...@}' unexpected
+$ @kbd{ksh -c 'a() @{ echo hi;@}; a'}
+hi
+...@end example
+
 Inside a shell function, you should not rely on the error status of a
 subshell if the last command of that subshell was @code{exit} or
 @code{trap}, as this triggers bugs in zsh 4.x; while Autoconf tries to
@@ -16213,10 +16227,10 @@ Shell Functions
 command in a @command{trap} handler can cause problems.

 @example
-$ @kbd{bash -c 'foo()@{ echo $?; @}; trap foo 0; (exit 2); exit 2'; echo $?}
+$ @kbd{bash -c 'foo() @{ echo $?; @}; trap foo 0; (exit 2); exit 2'; echo $?}
 2
 2
-$ @kbd{ash -c 'foo()@{ echo $?; @}; trap foo 0; (exit 2); exit 2'; echo $?}
+$ @kbd{ash -c 'foo() @{ echo $?; @}; trap foo 0; (exit 2); exit 2'; echo $?}
 0
 2
 @end example
@@ -16231,8 +16245,8 @@ Shell Functions
 @samp{set -e}, for example with Solaris 10 @command{bin/sh}:

 @example
-$ @kbd{bash -c 'f()@{ return 1; @}; set -e; f; echo oops}
-$ @kbd{/bin/sh -c 'f()@{ return 1; @}; set -e; f; echo oops}
+$ @kbd{bash -c 'f() @{ return 1; @}; set -e; f; echo oops}
+$ @kbd{/bin/sh -c 'f() @{ return 1; @}; set -e; f; echo oops}
 oops
 @end example

@@ -16259,13 +16273,13 @@ Shell Functions
 affect the current environment in the same manner as special built-ins.

 @example
-$ @kbd{/bin/sh -c 'func()@{ echo $a;@}; a=1 func; echo $a'}
+$ @kbd{/bin/sh -c 'func() @{ echo $a;@}; a=1 func; echo $a'}
 @result{}
 @result{}
-$ @kbd{ash -c 'func()@{ echo $a;@}; a=1 func; echo $a'}
+$ @kbd{ash -c 'func() @{ echo $a;@}; a=1 func; echo $a'}
 @result{}1
 @result{}
-$ @kbd{bash -c 'set -o posix; func()@{ echo $a;@}; a=1 func; echo $a'}
+$ @kbd{bash -c 'set -o posix; func() @{ echo $a;@}; a=1 func; echo $a'}
 @result{}1
 @result{}1
 @end example
-- 
1.7.2


Reply via email to