INCOMPATIBLITIES BETWEEN ksh93s- and Solaris /usr/bin/ksh Of these incompatibilities, the more serious are: #1, #4, #5, #8, #9, #10, #13, and possibly #6. 1) In Solaris ksh, in both POSIX-style functions, declared as "func()" and in non-POSIX-style functions, declared as "function func", variables can be declared local to that function and all functions it calls using the typeset special command, e.g., "typeset var". In ksh93, local variables only exist for non-POSIX-style (function func) functions. In addition, the scope of such local variables defined in non-POSIX functions does not include functions called by the current function. In ksh93, in POSIX-style functions (func()), variables declared with "typeset var" remain global in scope, and are shared between the calling program and the function. 2) In Solaris ksh, "alias -x" lists the exported aliases. In ksh93, alias -x exits 0 and outputs nothing. However in Solaris ksh, exported aliases do not work any differently than non-exported aliases. 3) In Solaris ksh, a dollar sign ($') followed by a single quote is interpreted literally. In ksh93, you must escape the dollar sign to get the previous behavior. Similarly, the dollar sign ($") preceding a double quote in Solaris ksh must be escaped. In ksh93, a $"..." string indicates a string to be translated for locales other than C or POSIX. Example: In Solaris ksh: In ksh93: % echo $'foo' % echo $'foo' $foo foo % echo $"foo" % echo $"foo" $foo foo % echo \$'foo' % echo \$'foo' $foo $foo % echo \$"foo" % echo \$"foo" $foo $foo 4) In Solaris ksh, the exit status of a command that terminated because it received a signal is 128+. In ksh93, it is 256+. Users should therefore not be relying on specific exit values, other than 0 for success or non-zero otherwise. 5) New built-ins in ksh93. ksh93 will include several built-ins which are not built-ins in Solaris ksh, and, if executed without a pathname prefix, may be run in place of the corresponding Solaris /usr/bin binaries on the path: printf sleep and these built-ins, which are executed if the corresponding /bin executable is found on the path before any other: cat chown head mkdir rmdir tee uniq wc Three known incompatibilities exist in the printf, mkdir, and uniq built-ins ksh93, which are based upon POSIX requirements. They are considered bugs, and it is expected that AT&T will fix these shortly before or after ksh93 integrates into Solaris. See builtin.bugs file for details. 6) Some built-ins don't allow options to be passed in any order as they did previously. For example, in Solaris ksh, "typeset -i8 foo" and "typeset -8i foo" work identically to declare the variable foo to be a base 8 integer. In ksh93, "typeset -i8 foo" declares foo to be a base 8 integer; "typeset -8i foo" declares foo to be an integer with the default base 10 7) The ENV variable in ksh93 is now evaluated for arithmetic expansions $(()) and command substitution `` In Solaris ksh, it is not. Previous uses of ` and $( as literal values in the ENV variable must be escaped with \. This won't be an issue for scripts, which do not execute the file pointed to by ENV. No problems are anticipated for this case. 8) The ERRNO variable has been dropped in ksh93. 9) In ksh93, pattern matching following a redirection symbol works only in interactive shell, not in scripts. For example, in a script executed by Solaris ksh, "echo hi >> foo*" will write to a file with a name matching the pattern foo* (starting with the string "foo"). The same script executed by ksh93 will write to a file literally named "foo*". 10) In ksh93, the original arguments ($1, $2, $3, etc.) to a script are restored after a dot script (.