Chinaunix首页 | 论坛 | 博客
  • 博客访问: 302434
  • 博文数量: 47
  • 博客积分: 2455
  • 博客等级: 大尉
  • 技术积分: 558
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-25 15:43
文章分类

全部博文(47)

文章存档

2016年(2)

2012年(10)

2011年(13)

2010年(1)

2009年(19)

2008年(2)

分类: Python/Ruby

2012-02-24 17:43:00

在Bash之外, 有些shell是不支持数组的, 比如ubuntu的dash. 在不支持数组的shell中可以有一种方式来模拟数组.

通过eval我们可以创建一个类似于数组的, 相同前缀的变量序列, 变相达到模拟数组的目的:

一个例子:

取数组元素的函数:

  1. get_value() {
  2. newname=${1}${2}
  3. eval "echo $`echo $newname`"
  4. }

如果我们做以下操作:

  1. pref=var

  2. indx=1
  3. eval "$pref$indx=110"
  4. val=`get_value $pref $indx`

  5. indx=2
  6. eval "$pref$indx=2110"
  7. val=`get_value $pref $indx`

  8. indx=3
  9. eval "$pref$indx=31110"
  10. val=`get_value $pref $indx`

于是我们就得到了以下输出:
  1. 110
  2. 2110
  3. 31110
通过这个例子, 我们可以看到, 在设置序列值时, 尽管我们是通过定义若干个变量来实现的, 但是却没有使用常量(使用常量当然也可以), 而是使用了indx这个变量. 就像数组赋值时提供数组名和下标一样.

取值时,我们也没有提供具体的变量名, 而只是提供变量序列的前缀和序号. get_value自动将其组装为变量名, 并且取出变量值. 就如同我们只提供数组名和下标就取出值一样.

该模拟方式可以用在需要跨shell的脚本中.
阅读(2939) | 评论(2) | 转发(1) |
给主人留下些什么吧!~~

winter.zhang2012-02-25 14:53:00

背包包111: shell为什么会不支持数组这么几本的东东呢?.....
很正常,  很多Unix系统中, /bin/sh的所链接的那个shell不支持数组.

背包包1112012-02-25 07:01:48

shell为什么会不支持数组这么几本的东东呢?