elecsnail的个人空间 https://bbs.21ic.com/?867354 [收藏] [复制] [RSS]

日志

Shell中模拟数组

已有 1205 次阅读2013-3-13 13:38 |系统分类:兴趣爱好|

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

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


  一个例子:


  取数组元素的函数:


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


  如果我们做以下操作:


  pref=var


  indx=1 eval "$pref$indx=110" val=`get_value $pref $indx`


  indx=2 eval "$pref$indx=2110" val=`get_value $pref $indx`


  indx=3 eval "$pref$indx=31110" val=`get_value $pref $indx`


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


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


  该模拟方式可以用在需要跨shell的脚本中。


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)