KSH For Loop Array: Iterate Through Array Values

How do I use ksh for loop to iterate thought array values under a UNIX / Linux / BSD operating systems?

The ksh shell supports two types of arrays:
  1. Indexed array
  2. associative array
Tutorial details
Difficulty Easy (rss)
Root privileges No
Requirements Ksh
Time 5m
[/donotprint]An element of a ksh array variable is referenced by a subscript. The value of all non-negative subscripts must be in the range of 0 through 4,194,303.


You can define array as follows either as an associative array or to be an indexed array.

Syntax for an indexed array


OR use set command as follows:

set -A arrayName value1 value2 value3

Syntax for an associative array

typeset -A employees


set -A arrayName val1 val2 val3

Examples for ksh indexed array

For example, create an array called characters with three values as follows:

set -A characters Mugen Jin Fuu

To print first value, enter:

echo ${characters[0]}

To print 3rd and last value, enter:

echo ${characters[2]}

To print all values, enter:

echo ${characters[@]}

To count number of items in an array called characters, enter:

echo ${#characters[@]}

You can use for loop as follows to iterate through all values:

for i in ${characters[@]}; do echo "Samurai Champloo character - $i"; done

Sample outputs:

Samurai Champloo character - Mugen
Samurai Champloo character - Jin
Samurai Champloo character - Fuu

You can add two more items as follows to exiting array:


Sample Shell Script

# set array called nameservers
set -A nameservers
# print all name servers
for i in ${nameservers[@]}
	echo $i

Sample outputs:

Fig.01: Ksh for loop array ns demo

Ksh associative arrays examples

## set associative array ##
typeset -A ns 
## Add values ##
ns[home]="" ## home dns server ip 
ns[isp]=""    ## my isp dns server ip
ns[google]=""     ## google public dns server ip
## Okay, display values #
print "${ns[home]}"
print "${ns[isp]}"
print "${ns[google]}"
## Count  number of items in an array #
print "${!ns[@]}"
## Use for loop to print all items in an array##
for i in "${!ns[@]}"
   echo "ns[$i] value is ${ns[$i]}"

Sample outputs:

ns[google] value is
ns[home] value is
ns[isp] value is

🐧 Get the latest tutorials on Linux, Open Source & DevOps via RSS feed or Weekly email newsletter.

🐧 7 comments so far... add one

CategoryList of Unix and Linux commands
File Managementcat
FirewallAlpine Awall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network Utilitiesdig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searchinggrep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNAlpine CentOS 8 Debian 10 Firewall Ubuntu 20.04
7 comments… add one
  • Nisrine Aug 19, 2011 @ 7:05

    If i need to print the next value in the array if a certain condition is verified
    for example:
    for i in “${array[@]}”
    if(….) then
    echo $(i+1)

    $(i+1) is wrong what can i do?

    • Jason Oct 16, 2012 @ 12:26

      Hi Nisrine,

      I hope my necromancing is welcome here, in case your issue is still relevant.

      $(ì+1) should actually be $((i+1)), since double parentheses evaluate mathematical expressions.

      I hope this helps someone!


      • Nisrine Oct 16, 2012 @ 14:14

        Thank you for ur reply! working!

        • rishab Jul 21, 2015 @ 12:31

          Wow she actually used your solution after 1 year :-P

  • Ken Jun 18, 2012 @ 21:21

    Excellent just what i needed for looping through an array

  • Dante Mar 1, 2016 @ 6:15

    Useful as f*ck!

  • skyhack Jun 15, 2016 @ 16:38

    If this were on StackExchange, +1000 for referencing Mugen, Jin, and Fuu.
    Very helpful!

Leave a Reply

Your email address will not be published.

Use HTML <pre>...</pre> for code samples. Problem posting comment? Email me @ webmaster@cyberciti.biz