嵌入式系统之自定义数组实现

        在实际的应用中有这样的一个需求,要求在不同的平台上实现通用的功能,需要检测平台的名称,实际的测试中发现有的老期的平台只能使用sh,而不用使用bash,而正好我的这个平台在sh下不能使用数组的功能。

实验脚本如这样:

# 平台数组

platforms=(fetmx6ull-s imx6ull imx6ul ok335x 6Quad imx6q i.MX6 5718 6818 4418 A40i 1028 ls1043ardb ls1046ardb ls1012ardb imx8mq OK8MP okmx8mm 3399 ok3568 okg2l)

for i in ${platforms[@]}    
do
       检测平台名称
done   

        

执行的时候就会报错误

解决方法

为了能够正常使用,经实验,可整理了几种方法,在这里列举出来,供用到的来参考。

使用eval

首先定义一个函数

# 首先定义一个函数
get_value() {

newname=${1}${2}

eval "echo $`echo $newname`"

}

# 实现
pref=array


indx=1

eval "$pref$indx=fetmx6ull-s"

val=`get_value $pref $indx`


indx=2

eval "$pref$indx=imx6ull"

val=`get_value $pref $indx`


indx=3

eval "$pref$indx=imx6ul"

val=`get_value $pref $indx`

这样就相当于定义了一个数组array ,变量分别是array1,array2,array3,看着好像有点麻烦,是吧,但是至少功能是实现了。

使用awk

        我们变换了一个思路,数组是提前保存好的一个结构,使用的时候直接取出就可以了,我们现在这么做,用一个字符串保存数组中的所有内容,当使用的时候我们在逐一取出其中一个就ok了,只是在取出的阶段发生变化而已。

str_platform="fetmx6ull-s imx6ull imx6ul ok335x 6Quad imx6q i.MX6 5718 6818 4418 A40i 1028 ls1043ardb ls1046ardb ls1012ardb imx8mq OK8MP okmx8mm 3399 ok3568 okg2l":wq!


 for j in `seq 1 20`       #上面的字符串一共攨空格隔开                          
 do
        i=`echo $str_platforms | awk '{print $'$j'}'`          
        echo $i
done

执行如下图:

root@imx6ulevk:~# cat a.sh 
str_platform="fetmx6ull-s imx6ull imx6ul ok335x 6Quad imx6q i.MX6 5718 6818 4418 A40i 1028 ls1043ardb ls1046ardb ls1012ardb imx8mq OK8MP okmx8mm 3399 ok3568 okg2l"

 for j in `seq 1 20`       #上面的字符串一共攨空格隔开                           
 do
        i=`echo $str_platform | awk '{print $'$j'}'`           
        echo $i
done

root@imx6ulevk:~# sh a.sh 
fetmx6ull-s
imx6ull
imx6ul
ok335x
6Quad
imx6q
i.MX6
5718
6818
4418
A40i
1028
ls1043ardb
ls1046ardb
ls1012ardb
imx8mq
OK8MP
okmx8mm
3399
ok3568

 使用文件做临时缓存

echo -e "fetmx6ull-s\nimx6ull\nimx6ul\nok3354418\nA40i\n1028\nls1043ardb\nls1046ard\n" >platforms.log

cat platforms.log |
while read line
do
   echo $line
done

创作不易,点个赞在走呗、欢迎关注。

--好记性不如烂笔头。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

six2me

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值