K-shawk!
Ok. I started writing this when I was standing in line to pick up an iPhone 4 (that’s right, this post has been that long in the making!), so this post was planned to be short with few examples!
I just wanted to introduce ksh93
to everyone (or as my very good friend calls it K-shawk!).
When it comes to shells most people know about sh
, csh
, ksh
, bash
etc. They know about strengths and weaknesses of each and what not. However, very few people know that there are 2 versions of ksh available out there.
ksh
– the most popular version packaged with pretty much all UNIX OSes. This is reallyksh88
. In other words, it’s the version ofksh
that was implemented in 1988.ksh93
– this is not as popular asksh88
, but in my experience, it’s packaged in every commercial OS.
I highly recommend upgrading to ksh93
for all your shell scripts and interactive shell. Why? Simply because it has a lot of features that were available to you only if you mixed awk
within your shell scripts (and hence the nickname K-shawk!). Here are some of the main ones:
-
Associative arrays. This is a big one. It helps you create associations (‘hashes’ in many languages) between strings. The traditional arrays can only use integers as indices, however, with associative arrays your can use strings as indices.
$ typeset -A x=( [A]=1 [B]=2 ) $ echo ${x[A]},${x[B]} 1,2
-
Compound Variables. These are C-style structures that can be used to group multiple variables together and passed around to functions as parameters.
$ typeset -C y=( A=1 B=2 ) $ echo ${y.A},${y.B} 1,2
-
Advanced Variable Substitution. You can perform substrings and string substitution within the variable substitution construct now.
$ x=Hello $ echo ${x//Hell/Problem} Problemo $ echo ${x:0:4} Hell
-
New Date Capabilities.
printf
can now handle date time formatting and allows you to perform a lot of date calculations that were not possible without mixing someperl
in your shell scripts.$ printf "%T\n" now Sat Aug 13 20:41:54 CDT 2016 $ printf "%(%Y-%m-%d)T\n" now 2016-08-13
There is a lot of depth to ksh93
and the more recent versions of the shell expand the compound variable syntax to provide object-oriented programming constructs and a lot more.
You can check what version comes with your OS distribution by running ksh93 --version
or ksh --version
(Most of the linux distributions will only have ksh93
and they link it as ksh
).
Visit David Korn's website KornShell.com for more details.
Also, Musings of an OS Plumber has great tutorials on some advanced ksh93
features.