next up previous contents
Next: Korn shell background and Up: Korn shell Previous: Korn shell

Korn shell variables

Variables are set with the \framebox{{\sf =}} 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 er
Ksh 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 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


next up previous contents
Next: Korn shell background and Up: Korn shell Previous: Korn shell
Marisa Luvisetto
2001-02-05