mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-02-24 06:54:13 +00:00
Many of these changes are minor typo fixes. The other changes (which are mostly compiler warning fixes) are: NEWS: - The --globcasedetect shell option works on older Linux kernels when used with FAT32/VFAT file systems, so remove the note about it only working with 5.2+ kernels. src/cmd/ksh93/COMPATIBILITY: - Update the documentation on function scoping with an addition from ksh93v- (this does apply to ksh93u+). src/cmd/ksh93/edit/emacs.c: - Check for '_AST_ksh_release', not 'AST_ksh_release'. src/cmd/INIT/mamake.c, src/cmd/INIT/ratz.c, src/cmd/INIT/release.c, src/cmd/builtin/pty.c: - Add more uses of UNREACHABLE() and noreturn, this time for the build system and pty. src/cmd/builtin/pty.c, src/cmd/builtin/array.c, src/cmd/ksh93/sh/name.c, src/cmd/ksh93/sh/nvtype.c, src/cmd/ksh93/sh/suid_exec.c: - Fix six -Wunused-variable warnings (the name.c nv_arrayptr() fixes are also in ksh93v-). - Remove the unused 'tableval' function to fix a -Wunused-function warning. src/cmd/ksh93/sh/lex.c: - Remove unused 'SHOPT_DOS' code, which isn't enabled anywhere. https://github.com/att/ast/issues/272#issuecomment-354363112 src/cmd/ksh93/bltins/misc.c, src/cmd/ksh93/bltins/trap.c, src/cmd/ksh93/bltins/typeset.c: - Add dictionary generator function declarations for former aliases that are now builtins (re:1fbbeaa1
,ef1621c1
,3ba4900e
). - For consistency with the rest of the codebase, use '(void)' instead of '()' for print_cpu_times. src/cmd/ksh93/sh/init.c, src/lib/libast/path/pathshell.c: - Move the otherwise unused EXE macro to pathshell() and only search for 'sh.exe' on Windows. src/cmd/ksh93/sh/xec.c, src/lib/libast/include/ast.h: - Add an empty definition for inline when compiling with C89. This allows the timeval_to_double() function to be inlined. src/cmd/ksh93/include/shlex.h: - Remove the unused 'PIPESYM2' macro. src/cmd/ksh93/tests/pty.sh: - Add '# err_exit #' to count the regression test added in commit113a9392
. src/lib/libast/disc/sfdcdio.c: - Move diordwr, dioread, diowrite and dioexcept behind '#ifdef F_DIOINFO' to fix one -Wunused-variable warning and multiple -Wunused-function warnings (sfdcdio() only uses these functions when F_DIOINFO is defined). src/lib/libast/string/fmtdev.c: - Fix two -Wimplicit-function-declaration warnings on Linux by including sys/sysmacros.h in fmtdev().
422 lines
20 KiB
Text
422 lines
20 KiB
Text
This is a list of changes that have been made since the 11/16/88 version
|
|
of ksh.
|
|
|
|
1. New features in 12/28/93
|
|
a. Associative arrays. The new version of ksh supports both
|
|
associative arrays and the older indexed arrays with the same
|
|
array syntax. A new -A option of typeset is used to declare
|
|
an array to be associative. As with indexed arrays, $name is
|
|
equivalent to ${name[0]}. The prefix operator ! was added
|
|
to the parameter expansion syntax to expand to the list of
|
|
indices. For example, ${!name[@]} expands to the list of array
|
|
indices for variable name.
|
|
|
|
b. Several additions have been made to shell arithmetic:
|
|
1. The shell now performs floating point arithmetic. The
|
|
typeset options -F and -E have been added for floating
|
|
point and scientific notation respectively.
|
|
2. The prefix and postfix ++ and -- operators.
|
|
3. The comma and ?: operators.
|
|
4. The math library functions.
|
|
5. An arithmetic for statement of the form
|
|
for ((expr1; expr2; expr3))
|
|
do ...
|
|
done
|
|
6. Integer arithmetic extended up to base 64.
|
|
|
|
c. Some additions to the macro expansion syntax have been made
|
|
to specify substrings and sub-arrays:
|
|
1. ${name:expr} expands to the substring of ${name} starting at
|
|
the character position defined by arithmetic expression expr.
|
|
2. ${name:expr1:expr2} expands to the substring of ${name} starting
|
|
at expr1 and consisting of at most expr2 characters.
|
|
3. ${name[@]:expr} expands to the values of ${name[@]} starting at
|
|
the element defined by arithmetic expression expr.
|
|
4. ${name[@]:expr1:expr2} expands to at most expr2 values of
|
|
${name} starting at expr1.
|
|
5. ${@:expr} expands the positional parameters starting at expr.
|
|
6. ${@:expr1:expr2} expands to at most expr2 positional parameters
|
|
starting at expr1.
|
|
7. ${!name} expands to the name of the variable named by name.
|
|
It will expand to name unless name is a reference variable.
|
|
8. ${!name[sub]} expands to the name of the subscript of the
|
|
given variable. If sub is @ or * the list of subscripts
|
|
is generated.
|
|
9. ${!prefix*} and ${!prefix@} expand to the list of variable
|
|
names beginning with prefix.
|
|
10. The substring operators, # and % can be now be applied
|
|
with aggregates (@ or *) and are applied to each.
|
|
11. ${name/pattern/string} expands to the value of name with
|
|
the first occurrence of pattern replaced by string.
|
|
With aggregates (@ or *) this operation is applied to each.
|
|
12. ${name/#pattern/string} Same as above but the pattern
|
|
to be replaced must match at the beginning.
|
|
13. ${name/%pattern/string} Same as above but the pattern
|
|
to be replaced must match at the end.
|
|
14. ${name//pattern/string} expands to the value of name with
|
|
each occurrence of pattern replaced by string.
|
|
With aggregates (@ or *) this operation is applied to each.
|
|
|
|
d. The name space for variables has been extended. The character '.'
|
|
can be used at the beginning of a name, and to separate identifiers
|
|
within a name. However, to create a name of the form, foo.bar,
|
|
the variable foo must exist. The namespace starting with .sh
|
|
is reserved for shell implementation variables. Exported
|
|
variables cannot contain a '.'.
|
|
|
|
e. Compound assignments. The assignment syntax, varname=value,
|
|
has been extended to allow assignments of the form
|
|
varname=(assignment_list). As elsewhere in the shell
|
|
spaces or tabs are optional around the parentheses, and
|
|
no space is permitted between the varname and the =. The
|
|
assignment_list can be one of the following:
|
|
1. A list of words. In this case each word is expanded as
|
|
in a for list and the resulting items become elements
|
|
of the indexed array varname.
|
|
2. A list of subscript assignments in the form
|
|
[subscript]=value. In this, these elements become
|
|
elements of the associative array varname.
|
|
3. A list of assignments; simple or compound. In this
|
|
case, each assignment is made to varname.name, where
|
|
name is the name of the enclosed assignment.
|
|
4. Assignments in the form of readonly or typeset
|
|
statements. In this case each assignment is made as
|
|
in 3 above, and the attributes are given to the
|
|
corresponding variable.
|
|
In case 3 and 4 above, the value of "$varname" after
|
|
the above assignment is (assignment_list), where the
|
|
assignment_list produced would reproduce all of the
|
|
variables under varname.*.
|
|
|
|
f. Function names of the form variable.action (called discipline
|
|
functions) can be defined where variable is any valid variable
|
|
name and action is get, set, or unset. The function variable.get
|
|
is invoked each time the variable is referenced. The set
|
|
discipline is invoked each time the variable is assigned to.
|
|
The unset discipline is invoked when a variable is unset.
|
|
The new variables .sh.name, .sh.subscript, and .sh.value are
|
|
defined inside the function body. Other shell extensions
|
|
may have their own set of discipline functions.
|
|
|
|
g. The compound command !, which negates the return value of the
|
|
following pipeline, has been added.
|
|
|
|
h. On systems that support dynamic loading with dlopen(), it is
|
|
now possible to add built-in commands at runtime with the
|
|
builtin command named 'builtin'.
|
|
|
|
i. The following builtins have been added:
|
|
1. command name [ ... ]
|
|
2. sleep [decimal-seconds]
|
|
3. builtin [-ds] [-f file] [name...]
|
|
4. getconf name [pathname]
|
|
5. disown [job...]
|
|
|
|
j. An addition format for literal strings, $'....' can
|
|
be used where ever literal strings are valid. The string
|
|
inside the single quotes will be converted using the ANSI-C
|
|
escape conventions. Additionally, the escape sequence \E
|
|
expands to the escape character (default \033) whenever ANSI-C
|
|
escape sequences are recognized.
|
|
|
|
k. A typeset -n option has been added which causes the value of a
|
|
variable to be treated as a reference to another variable so that
|
|
variables can be indirectly named. For example, if $1 contains
|
|
the name of a variable, then typeset -n foo=$1 causes the variable
|
|
foo to be synonymous with the variable whose name is $1. A builtin
|
|
alias, nameref='typeset -n' has been added to aid mnemonics.
|
|
Reference names cannot contain a '.'. Whenever that portion of
|
|
a variable up to the first '.' matches a reference name, the
|
|
reference value is substituted. For example, with nameref foo=.top,
|
|
then ${foo.bar} is equivalent to ${.top.bar}. When used as the
|
|
index of a for or select loop, each assignment causes a
|
|
new name reference to occur.
|
|
|
|
l. The KEYBD trap has been added which is triggered when a key
|
|
or escape sequence is typed while reading from the keyboard
|
|
in an edit mode. This, combined with some new variables
|
|
makes it possible to program your key bindings in ksh.
|
|
|
|
m. New variables have been added:
|
|
1. FIGNORE defines a set of file names to be ignored in each
|
|
directory when performing pathname expansion, replacing
|
|
the rule that requires that a leading . be matched explicitly.
|
|
2. Variable sh.edchar contains the value of the keyboard character
|
|
that has been entered when processing a KEYBD trap. If the value
|
|
is changed as part of the trap action, then the new value replaces
|
|
the key or keys that caused the trap.
|
|
3. Variable sh.edcol is set to the character position of the cursor
|
|
within the input buffer during a KEYBD trap.
|
|
4. Variable sh.edmode is set to the escape character when in vi
|
|
insert mode.
|
|
5. Variable sh.edtext is set to the contents of the input buffer
|
|
during a KEYBD trap.
|
|
6. HISTEDIT is checked before FCEDIT. FCEDIT is obsolete.
|
|
7. HISTCMD is the number of the current command in the history
|
|
file.
|
|
8. Variable .sh.version is set to the version string for
|
|
this shell.
|
|
9. Variable .sh.name is set to the name of the variable
|
|
that was referenced or assigned to when executing a get
|
|
or set discipline function.
|
|
10. Variable .sh.subscript is set to the subscript for the variable
|
|
that was referenced or assign to when executing a get or
|
|
set discipline function.
|
|
11. Variable .sh.value is set to the new value for the variable
|
|
that was assigned to when executing the set discipline function.
|
|
|
|
n. New invocation and set -o options have been added:
|
|
1. set -o notify (or set -b) causes background completion messages
|
|
to be displayed as soon as the job completes.
|
|
2. There is a compile time option named KIA which enables
|
|
creation of a relational database for commands, variables
|
|
and functions defined and referenced by a script. The
|
|
option -I <filename>, causes the database to be generated
|
|
in <filename>. The database format can be queried via
|
|
the cql command.
|
|
o. ksh93 can read and evaluate pre-compiled scripts generated by
|
|
a separate program called shcomp.
|
|
p. More work on internationalization has been added:
|
|
1. The decimal point character is processed per locale
|
|
2. A $ can be placed in front of each string to indicate
|
|
that the string needs translation but is otherwise ignored.
|
|
This means that if a message catalog of all $"..." strings
|
|
is generated, then a program such as print $"hello world"
|
|
could display "bonjour monde" in the French locale.
|
|
q. Backreferences have been added to pattern matching. The sequence
|
|
\d, where d is a digit from 1-9, matches the same string as
|
|
the d-th previous parenthesis group. Backreferences
|
|
can be used within patterns, and within replacement strings
|
|
with any of the ${name/...} operators.
|
|
|
|
2. Changes made in 12/28/93
|
|
a. The output format of many commands has changed as follows:
|
|
1. System error messages are displayed whenever a failure
|
|
is caused by a system call.
|
|
2. The exit status has changed in many cases:
|
|
a. USAGE messages cause an exit status of 2.
|
|
b. Commands not found cause exit - 127.
|
|
c. Command found, but not executable - 126.
|
|
d. Terminated because of signal - 256+sig
|
|
3. The output of values from built-ins that contain special
|
|
characters are quoted in a manner that then can be re-input.
|
|
4. The trace output puts quotes around the output so that it
|
|
can be reused as input.
|
|
5. The output for trap is in a format that can be reinput to
|
|
the shell to restore the traps.
|
|
6. kill -l lists the signal names without numbers as
|
|
required by the POSIX standard.
|
|
|
|
b. The following changes have been made to shell functions:
|
|
1. The semantics of functions declared with name() has changed
|
|
to conform with the IEEE-POSIX 1003.2 standard. In particular,
|
|
these functions are executed in a dot script environment rather
|
|
than a separated function environment so that there are no
|
|
local variables and no scoping for traps.
|
|
2. Functions declared as function name, preserve the old ksh
|
|
semantics can be also used as the first argument to the dot (.)
|
|
command to have them executed in a dot script environment.
|
|
|
|
c. The command search rules have changed as follows:
|
|
1. Special built-ins (those with a dagger in front of them) are
|
|
executed first.
|
|
2. Functions are executed next.
|
|
3. Other built-ins that do not require an executable version
|
|
(for example cd and read) come next.
|
|
4. If the command name contains a slash, the pathname corresponding
|
|
to the command name is executed.
|
|
5. If name corresponds to a previously encountered pathname
|
|
on the PATH variable, the corresponding command is executed.
|
|
6. If the command name does not contain a slash, then the PATH
|
|
variable is used to find an executable by that name. If
|
|
the directory that the command is found is also contained in
|
|
the FPATH variable, then the command treated as a function.
|
|
If the shell has a built-in version of the command corresponding
|
|
to this command, then the built-in version of this command
|
|
is executed. Otherwise, the shell remembers that pathname
|
|
corresponding to this command name and executes this pathname.
|
|
7. If the name is not found on PATH, then the directories in
|
|
FPATH are searched. If found, then the command is executed
|
|
as a function.
|
|
|
|
d. Built-in commands options now conform to the IEEE-POSIX 1003.2
|
|
conventions with some additions. In particular,
|
|
name -?
|
|
will now print a Usage line for name, except for true, false,
|
|
colon, login, newgrp, echo, [, and command.
|
|
|
|
e. Tilde expansion is now performed as part of the word expansions.
|
|
The effect of this is that if word begins with ~ in ${name op word},
|
|
it will be expanded unless escaped.
|
|
|
|
f. Pathname expansion is no longer performed on redirection words
|
|
unless the shell is interactive.
|
|
|
|
g. Changes to shell and options:
|
|
1. The -n option has been enhanced to produce more warning and
|
|
portability messages.
|
|
2. The -C option is equivalent to -o noclobber. Files are
|
|
created with O_EXCL when -C is on.
|
|
|
|
h. The following changes have been made to [[ ... ]]:
|
|
1. A string by itself is equivalent to -n string.
|
|
2. -e has been added as equivalent to -a.
|
|
3. == has been added as equivalent =.
|
|
4. -a and = are now considered obsolete.
|
|
5. Arithmetic comparisons are now considered obsolete.
|
|
|
|
i. kill has been changed as follows:
|
|
1. Signal names can be upper case or lower case.
|
|
2. Numerical arguments to kill -l cause the given signal names to
|
|
be displayed.
|
|
3. String arguments to kill -l cause the given signal numbers to
|
|
be displayed.
|
|
4. Synopsis changed for getopts conformance.
|
|
|
|
j. print has a -f format option which is equivalent to
|
|
the IEEE POSIX printf. Both print -f format, and
|
|
printf have the following extensions from IEEE POSIX:
|
|
1. Floating point formats are supported.
|
|
2. Size and precision specifications can be *.
|
|
3. The %d option can take an argument after precision to
|
|
specify the base that the number will be displayed.
|
|
4. A %q format can be used to output a string quoted so
|
|
that it can be re-input to the shell.
|
|
5. A %P format can be used to output the shell pattern which
|
|
corresponds to the give extended regular expression.
|
|
6. For numerical fields, the arguments can be arithmetic
|
|
expressions which will be evaluated.
|
|
7. The %n format works as described in ANSI-C.
|
|
|
|
k. The following changes have been made to fc:
|
|
1. It has been renamed hist. fc is now a predefined alias.
|
|
2. hist uses ${HISTEDIT:-$FCEDIT}. FCEDIT is obsolete.
|
|
3. A new -s option is equivalent to the obsolete -e -.
|
|
4. If the first argument refers to a command earlier than the
|
|
first accessible command, it now implies the first accessible
|
|
command, so that hist -l 1 lists all accessible history commands.
|
|
|
|
l. The dot command (.) has changed as follows:
|
|
1. The argument can be the name of a function declared as
|
|
function name. The function will execute without creating a
|
|
new scope.
|
|
2. If there are arguments to the given script or function,
|
|
the positional parameters are restored to their original
|
|
value when . completes.
|
|
|
|
m. The read built-in has been changed as follows:
|
|
1. A -A option to read has been added to allow the fields to be
|
|
read into an indexed array.
|
|
2. A -t n option has been added which causes read to
|
|
timeout after n seconds when reading from a slow device.
|
|
3. A -d char option has been added which causes the read
|
|
to terminate at char rather than at new-line.
|
|
|
|
n. The trap command has been changed as follows:
|
|
1. Trap names can be either upper case or lower case.
|
|
2. Trap -p only causes the specified trap values to be displayed.
|
|
3. The value of trap in a subshell will be the value in the parent
|
|
shell until a call to trap which changes the trap settings has
|
|
been made. Thus, savetraps=$(trap) works as required by the
|
|
POSIX standard.
|
|
|
|
o. The exec command has been extended as follows:
|
|
1. The -c option clears the environment first.
|
|
2. The -a name option sets argv[0] to name for the program.
|
|
|
|
p. true and false are built-ins, not aliases to built-ins.
|
|
|
|
q. test has been modified to conform to the IEEE-POSIX 1003.2
|
|
standard when there are three or less arguments.
|
|
|
|
r. umask -S option displays the mask in a symbolic format.
|
|
|
|
s. wait now returns the correct exit status of any previous
|
|
background job that has not been waited for, not just
|
|
the most recent one.
|
|
|
|
t. The whence built-in has an option -a which causes all
|
|
uses for the given command name to be reported.
|
|
|
|
u. unalias has -a option to clear all the aliases.
|
|
|
|
v. The times built-in command has been removed. The time
|
|
reserved word, without a command, gives time cumulative
|
|
time for the shell and its children. A built-in alias
|
|
for times should enable scripts using times to continue
|
|
to run.
|
|
|
|
w. Command substitution and arithmetic substitution will now be
|
|
performed for PS1, ENV, and PS4 evaluation in addition to
|
|
parameter expansion.
|
|
|
|
x. The SECONDS variable now displays elapsed time in floating
|
|
point seconds with 3 places after the decimal point by
|
|
default.
|
|
|
|
y. The getopts built-in now handles the complete libast optget
|
|
functionality. If any errors have occurred with getopts
|
|
when it has reached the end of arguments, then the Usage
|
|
message will be generated from the option string and the
|
|
exit status from getopts will be 2 rather than 1. The
|
|
usage message will be stored in the OPTARG variable if
|
|
the option string contains a leading colon; otherwise
|
|
it will be printed on standard error automatically.
|
|
|
|
z. THE ENV file is only processed for interactive shell
|
|
invocations. In addition, the -x attributes for
|
|
aliases and functions is ignored.
|
|
|
|
aa. The built-in edit modes have been changed as follows:
|
|
1. The pathname completion and pathname listing options
|
|
now perform command completion and command listing
|
|
when applied to a word in the command position.
|
|
2. In emacs mode ^N as the first related command after
|
|
the prompt will move to the next command relative to the
|
|
last known history position.
|
|
3. In emacs mode, successive kill and delete commands will
|
|
accumulate their data in the kill buffer, by appending or
|
|
prepending as appropriate. This mode will be reset by any
|
|
command not adding something to the kill buffer.
|
|
4. The control-T of emacs mode has been changed to behave like
|
|
control-T in gnu-emacs.
|
|
bb. The TMOUT variable also sets a limit for select timeouts
|
|
and default timeouts for read.
|
|
|
|
|
|
4. The source code has undergone significant modification.
|
|
a. Much of the code has been rewritten, In many cases this has
|
|
resulted in significant performance improvement.
|
|
|
|
b. The code is organized differently. See the README files
|
|
for more details.
|
|
|
|
c. Most configuration parameters now get generated using
|
|
the FEATURE mechanism of nmake. Other options are set
|
|
in the OPTIONS file.
|
|
|
|
c. There are several new compile time options. See the README
|
|
file for details. Some of the old ones have been removed.
|
|
|
|
d. The install script is a Mamfile that is generated by
|
|
nmake and processed by a script that comes with the
|
|
distribution.
|
|
|
|
e. There are far fewer global names. This should make it
|
|
must easier to add built-in commands without worrying
|
|
about conflicts.
|
|
|
|
f. The code uses the sfio library which makes it possible
|
|
to mix with stdio.
|
|
|
|
g. The code is written in ANSI C with full prototypes.
|
|
The code is based on the IEEE POSIX 1003.1 standard.
|
|
The code can be compiled with K&R C and with C++ by
|
|
using the ANSI cpp that comes with nmake or running
|
|
the code through the proto filter before pre-processing.
|
|
This happens automatically with our shipping system.
|
|
|
|
h. There is a programming interface for capturing references
|
|
and assignment to shell variables. It is also possible
|
|
to intercept variable creation and supply the array processing
|
|
function for that variable. See nval.3 for a description.
|