KSH For循环数组:遍历数组值

时间:2020-01-09 10:41:08  来源:igfitidea点击:

如何在UNIX/Linux/BSD操作系统下使用ksh for循环迭代思想数组值?

ksh shell支持两种类型的数组:

  • 索引数组
  • 关联数组

ksh数组变量的元素由下标引用。
所有非负下标的值都必须在0到4,194,303之间。

语法

您可以按以下方式将数组定义为关联数组或索引数组。

索引数组的语法

arrayName[0]=value1
arrayName[1]=value2
arrayName[3]=value3

或使用set命令,如下所示:

set -A arrayName value1 value2 value3

关联数组的语法

typeset -A employees
employees[sirname]="value1"
employees[firstname]="value"

或者

set -A arrayName val1 val2 val3

ksh索引数组的示例

例如,创建一个具有三个值的字符数组,如下所示:

set -A characters Mugen Jin Fuu

要打印第一个值,请执行:

echo ${characters[0]}

要打印第三个和最后一个值,请执行:

echo ${characters[2]}

要打印所有值,请执行:

echo ${characters[@]}

要计算称为字符的数组中的项数,请执行:

echo ${#characters[@]}

您可以如下使用for循环遍历所有值:

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

输出示例:

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

您可以向退出数组中添加以下两项:

characters[3]="Sunflower-Samurai"
characters[4]="Detective-Manzo"

Shell脚本示例

#!/bin/ksh
# set array called nameservers
set -A nameservers 192.168.1.1 192.168.1.5 192.54.1.5
 
# print all name servers
for i in ${nameservers[@]}
do
	echo $i
done

Ksh关联数组示例

## set associative array ##
typeset -A ns 
 
## Add values ##
ns[home]="192.168.1.254" ## home dns server ip 
ns[isp]="123.1.2.254"    ## my isp dns server ip
ns[google]="8.8.8.8"     ## 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[@]}"
do
   echo "ns[$i] value is ${ns[$i]}"
done

输出示例:

ns[google] value is 8.8.8.8
ns[home] value is 192.168.1.254
ns[isp] value is 123.1.2.254