Variables are set with the
operator as in Bourne shell. No
space is allowed around the = operator. Variables may have attributes
assigned by typeset with the following syntax:
| Korn Shell typeset syntax | |
| typeset -attrib(s) variable=[value] | assign attribute and optional value |
| typeset +attrib(s) variable | remove attribute |
| typeset | list all vars and attributes |
| typeset -attrib | list all vars with -attrib type |
| typeset +attrib | list only vars with +attrib type |
| List of typeset Supported Attributes | |
| -f | the name refers to a function |
| -H | system to hostname file mapping |
| -i | integer |
| -l | lower case |
| -L | left justify, remove leading spaces |
| -LZ | left justify, remove leading zeroes |
| -r | read only (cannot be removed) |
| -R | right justify |
| -RZ | right justify with leading zeroes |
| -t | tag named parameter |
| -u | upper case |
| -x | export |
Any variable can be assigned the output of a command or of a file with the
syntax:
| var=$(command) | Korn specific |
| var=`command` | Bourne compatible |
var=$(< file) |
Korn specific |
| var=`cat file` | Bourne compatible |
Variables are removed by the unset builtin. To define a variable that
executes a script file using Ksh syntax, do the following:
> ksh $ cv=$(<kls) $ echo $cv ls -al $ $ $cv total 5 drwxr-xr-x 3 john users 8192 Mar 10 10:48 . drwxr-x--x 17 john users 8192 Mar 9 16:05 .. -rw-r--r-- 1 john users 299 Mar 9 11:25 a.a -rwxr-xr-x 1 john users 261 Mar 10 08:44 cread -rw-r--r-- 1 john users 37 Jun 18 1998 erKsh Special variables are:
| Korn Shell Special Variables | |
| # | number of positional parameters |
| ? | exit status |
| $ | process ID |
| - (dash) | current options |
_ (underscore) |
the last argument of the previous command |
| ! | process ID of last background |
| ERRNO | error no. of last failed system call |
| LINENO | the line no. of the current script line in execution |
| OLDPWD | previous cd directory |
| OPTARG | last option processed by getopts |
| OPTIND | index of last option processed by getopts |
| PPID | parent PID |
| PWD | current directory |
| RANDOM | random funcion |
| REPLY | menu item no. in response to select Ksh command |
| SECONDS | seconds since shell invocation |
| CDPATH | search path for cd command |
| COLUMNS | edit window width |
| EDITOR | editor management |
| ENV | generate path name in tracked alias and functions |
| FCEDIT | default editor for history processing command fc |
| FPATH | search path for functions |
| IFS | internal field separator |
| HISTFILE | store command history file |
| HISTSIZE | history buffer size |
| HOME | home directory |
| LANG | system locale |
| LC_COLLATE | collating sequence |
| LC_CTYPE | character classification |
| LC_MESSAGES | language for system messages |
| LC_MONETARY | monetary format |
| LC_NUMERIC | numeric format |
| LC_TIME | date and time format |
| LINES | column length |
| LOGNAME | login name |
| mail notify | |
| MAILCHECK | mail notify interval |
| MAILPATH | mail notify |
| NLSPATH | search path for messages |
| PATH | searc path for commands |
| PS1 | primary promt |
| PS2 | secondary prompt |
| PS3 | selection prompt (default #?) |
| PS4 | trace prompt (default +) |
| SHELL | shell in use |
| TMOUT | command timeout to terminate shell |
| VISUAL | editor option |
Variables are protected by braces:
$ print Current options/ERRNO: ${-}, $ERRNO
Current options/ERRNO: ism, 10
Metacharacters are printed when prefixed by \.
| Korn Shell Variable Usage and Setting Rules | |
| varlen=${#var} | variable length |
| var=${var1:-value} | var=var1 if var1 set, var=value if var1.not.set or empty |
| var=${var1-value} | var=var1 if var1 set, var=value only if var1.not.set |
| var=${var1:=var2} | var=$var1 if var1 set and not empty, else = $var2 |
| var=${var1=var2} | var=$var1 if var1 set even if empty, else = $var2 |
| var=${var1:+var2} | var=$var2 if var1 set and not empty, else var not set |
| var=${var1:+var2} | var=$var2 if var1 set even if empty, else var not set |
| var=${var1#var2} | var=var1 with smallest part of left matched var2 deleted |
| var=${var1##var2} | var=var1 with largest part of left matched var2 deleted |
| var=${var1%var2} | var=var1 with smallest part of right matched var2 deleted |
| var=${var1%%var2} | var=var1 with largest part of right matched var2 deleted |
| var=${var1:?} | var=var1 if var1 set else error message |
| var=${var1:?var2} | var=var1 if var1 set else var=var2 and exit |
Korn shell can handle arrays as C shell but with a different syntax.
| Korn Shell Array Syntax | |
arr[0]=val0 arr[1]=val1 ... |
init array in any order |
set -A arr val0 val1 ... |
alternate init for ordered array |
typeset arr[0]=val0 arr[1]=val1 ... |
alternate init array in any order |
${arr}, $arr |
array element zero |
${arr[n]} |
array element n |
${arr[n+2] |
array element n+2 |
${arr[$i]} |
array element $i |
${arr[*]}, ${arr[@]} |
all elements of array |
${#arr[*]}, ${#arr[@]} |
number of array elements |
${#arr[n]} |
length of array element n |
Example of array usage:
#!/bin/ksh
#-----------karray: arrays with Korn shell
#
echo Proc $0: arrays in Korn shell
echo
set -A rgb red green blue yellow magenta cyan
print rgb is a ${#rgb[*]} items color array with values:
print ${rgb[*]}
print 4-th item is ${rgb[1+3]} ${#rgb[4]}-bytes long
#
#----------end script------------------
The set +A statement allows partial redefinition of ordered array
elements. Consider the following:
$ set -A rgb red green blue yellow magenta cyan
$ print ${rgb[*]}
red green blue yellow magenta cyan
If you use -A to change only the first item of array rgb, the
array is truncated. If you use +A, the first items are changed keeping the
remaining ones:
$ set -A rgb red green blue
$ print ${rgb[*]}
red green blue
$ set -A rgb red green blue yellow magenta cyan
$ set +A rgb rosso
$ print ${rgb[*]}
rosso green blue yellow magenta cyan
In Korn shell quotes have the same usage as in Bourne shell.
single quotes'hide meaning of special characters, do not perform
variable substitution within quoted string
double quotes"preserve embedded spaces and newlines, set vars to
NULL, display single quotes, perform variable substitution
back quotes`assign command output to vars