之前曾写过一篇《Linux/UNIX不同shell环境下数组的处理》,在这里简单谈谈Bash 和ksh下数组的批量处理。实际中数组在兼容性要求很高的情况下不是很好的实现方式,我个人认为自己构造变量序列也不失是一种解决手段。姑且我把这种数组的批量处理叫做“伪数组法”。
下面的内容适用于bash和ksh,不适用于csh。
eval可以展开变量,相当于把命令放到子shell去执行,这样的变量被替换,并当作命令再次执行。
我们可以通过num=8和eval var$num来引用var8这个变量(适用于bash和ksh,不适用于csh),注意它不同于数组,var8,是我们手动构造的变量。
- num=8
- eval var$num="var8"
- #要特别注意如果在取值的时候""''中现现了空格等等特殊字符,要全部转义。
上面的应用也常用来对数据进行操作。
关于数据的赋值:
- for i in `seq 1 5` ;do eval var${i}=$(( $i*2 ));done
- #本例子中有些特殊,eval可以用let命令来替代,但是意义是不一样,只是效果一样。
关于数值的引用 。
- for i in `seq 1 5` ;do eval echo $var${i};done
- #或者$var${i}也可以用$((var${i}))代替
后记:我们基至可以基于这个思想,根据需要批量定义许多数组变量,并结合《Linux/UNIX不同shell环境下数组的处理》中提到的数组的定义、删除和数组中元素的增加和删除步骤,这样在Shell中处理数组就更加得心应手了。
本文转自xiaoyuwang 51CTO博客,原文链接:http://blog.51cto.com/wangxiaoyu/490534,如需转载请自行联系原作者