The Time Keyword in Bash

The word time is one of the bash shell reserved words. It is not a bash shell builtin. $ builtin time bash: builtin: time: not a shell builtin Bash does support the older Bourne shell keyword times as a builtin. This builtin prints out the user and system times used by the shell and its children. So where is the time reserved word used in the bash shell? It is primarily intended for printing pipeline timing statistics. From the current online bash documentation: The format for a pipeline is [time [-p]] [!] command1 [| command2 …] The output of each

Korn Shell DEBUG Trap

The trap shell builtin is used to change the way signals are handled by the Korn Shell 93 (ksh93) shell. In addition, a trap may be set for three ksh93 pseudo-signals: EXIT, ERR, and DEBUG. In this post we demonstrate how to use the DEBUG pseudo-signal to trap changes in the value of a variable for debugging purposes. trap [ -p ] [ action ] [ sig ] . . . The -p option causes the trap action associated with each trap as specified by the arguments to be printed with appropriate quoting. Otherwise, action will be processed as if

Differences in Variable Scope in Shell Functions

Ksh93 and bash have subtly different scopes for variables defined in shell functions as the following example shows: # POSIX function syntax testme2() { printf “Function testme2 invokedn” var21=testme21 typeset var22=testme22 } function testme1 { printf “Function testme1 invokedn” var11=testme11 typeset var12=testme12 } testme1 echo “VAR11=$var11” echo “VAR12=$var12” Here is the output when run under ksh93: Function testme1 invoked VAR11=testme11 VAR12= Function testme2 invoked VAR21=testme21 VAR22=testme22 and here is the output when run under bash: Function testme1 invoked VAR11=testme11 VAR12= Function testme2 invoked VAR21=testme21 VAR22= Note the different output for var22! Ksh93 has lexical scoping. A variable is normally global

Source a Function in KSH93

Ksh93 allows you to source a file or a function into local scope. Other shells support sourcing a file but ksh93 is the only shell that I am aware of that allows you to also invoke a function with the source command. From the KSH93 manpage: . name [ arg … ] If name is a function defined with the function name reserved word syntax, the function is executed in the current environment (as if it had been defined with the name() syntax.) Otherwise if name refers to a file, the file is read in its entirety and the commands

Custom Arithmetic Functions in Korn Shell 93

In modern versions of Korn Shell 93, arithmetic functions can be defined using the following shell function syntax: function .sh.math.fuctname x y z { … } where name is the function name invoked within the arithmetic syntax ((…)) and x, y and z are long double arguments passed to fuctname as name references. x, y and z are used for functions with one, two and three arguments respectively. The return value of the function is the value of the long double .sh.value variable when the function returns. Here is a simple example to try: #!/bin/ksh function .sh.math.mymath x { ((