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


Some ksh versions available

2012-02-18 (see recent changes)

Keep in mind that a vendor might have added further modifications to a release.

ksh88

88
Version 11/16/88 Ultrix 4.0, 4.5 In fact it seems to be the very first 88 release:
  • still dumps core upon "$(name=value)"
  • "unused" $! still expands to "0" instead of ""
88c
Version M-11/16/88 HP-UX 8-11 It prints a plain 88, but in fact is a 88c:
  • doesn't dump core anymore while in read with stderr redirected
    and in emacs mode when receiving a signal that has a trap set
    (this got fixed with 88c)
it's missing fixes from ksh88-d:
  • "a=1 set" should behave like "set" but prints nothing.
  • "for i in a b; do echo ${i[@]};done" still yields the error "ksh: i: subscript out of range"
88d
Version 11/16/88d SVR4.0 v2.1
EP/IX 2.2.1AA
AIX 3.2
Version M-11/16/88d AIX 3.2 /usr/mbin/ksh
88e
Version M-11/16/88e IRIX 4.0.5
Version 11/16/88e Unicos 9.0.2.2
ksh88e introduced three features, which are not documented in the release file
  • negation of a command/pipeline with !, for example: "if ! grep [...]"
    Exception: not available in a post-installed ksh88-g I once found on a later SunOS 4.
  • /dev/(tcp|udp)/{host-IP}/{port}, usable in redirections.
    Exception: this is not compiled into the HP-UX ksh88-f, and the code depends on the
    cpp macro SOCKET which is defined in include/sh_config.h.
  • a fallthrough mechanism in case. The following prints both 2 and *
        case 2 in
        1) echo 1  ;&
        2) echo 2  ;&
        *) echo \* ;&
        esac
88f
Version M-11/16/88f-beta4    IRIX 5.3-6.3
Version 11/16/88f IRIX 6.3+
Version M-11/16/88f OSF1/V4+
AIX 4.3.*, AIX 5.1-3
IRIX-6.5.5
HP-UX 10,11 /usr/bin/sh



In the HP-UX 11 /bin/sh the undocumented flag "Q" disables reading of $ENV at startup.
88g
Version 11/16/88g OpenServer 5.0.6
AUSPEX (SunOS 4) 4.1.4
SVR4.2
88h
Version M-11/16/88h UnixWare 2.1, OpenUnix 8.0
88i
Version 11/16/88i SunOS 5.1-5.5.1
Version M-11/16/88i SunOS 5.6+

See also ksh88 bugfixes ("RELEASEa" in the ksh88 package) for modifications up to ksh88i (local copy)

ksh93

All releases expand ${.sh.version}.

93
Version M-12/28/93 OSF1/V4 ff.
AIX 4.3.2 (initial ksh93 release)
93d
Version M-12/28/93d SunOS 5.5.1+
HP-UX 10.20+
UnixWare 7.1.4 /usr/dt/bin/dtksh
93e
Version M-12/28/93e-SCO UnixWare 2.1/7.1.4, OpenUnix 8.0
Version M-12/28/93e AIX 5.1-3
At some time before release 93k+, the date format changes, from 12/28/93 to 1993-12-28.
And a + sign means another release with small fixes. Example: Version 1993-12-28 k+
93n
M 1993-12-28 n AIX 5.3 (optional)
93s
Version M 1993-12-18 s MacOS X 10.6.3
UWIN 4.2 2007-12-11
93t
Version M 93t 2008-11-04 SunOS 5.11 /
    OpenSolaris 2009.06 (x86)
With 93s+, the version format changed again:
now the actual release date is contained, from "1993-12-28 s+" to "93s+ 2008-01-31".
And different dates for the same letter are possible.
The + sign is still used. Examples: "93t+ 2009-05-01", "93t+ 2010-03-05"

Since release 93t, KSH_VERSION is a name reference to .sh.version.
And in an arithmetic expression, these variables result in a number which increases each release,
example: $ echo ${.sh.version} , $(( .sh.version ))
-> Version JMP 93t+ 2010-03-05 , 20100305

After "Version" now there is a concatenation of letters indicating compile time options:

    A  SHOPT_AUDIT	/* keyboard logging */
    B  SHOPT_BASH	/* bash compatibility code */
    L  SHOPT_ACCT	/* accounting */
    M  SHOPT_MULTIBYTE	/* multibyte character handling */
93t+
Version JM 93t+ 2010-05-24     UWIN 4.3a 2008-11-15 New shell option since 93t+:
    J  SHOPT_BGX	/* background job extensions */
New or renamed shell options since 93u:
    j  SHOPT_BGX
    J  SHOPT_COSHELL	/* job pools */
    P  SHOPT_PFSH	/* solaris exec_attr(4) profile execution */

For details about the changes see the link "notes and changes" on the kornshell homepage
(local snapshot of "RELEASE", the changelog in the ksh93 package).
The differences between ksh88 and ksh93 are shown in RELEASE88 in the ksh93 package.

ksh86

86
"Version 06/03/86" ?         actually released?
86a
Version 06/03/86a actually distributed by any vendor?


<http://www.in-ulm.de/~mascheck/various/shells/ksh_versions.html>