字符串是否存在于列表中
工作需要,需要在shell脚本中对各种开发板进行区分,起初使用if else这种方式,虽然能解决问题,但是许多有共性的单板也被分开了,其实处理流程是一样的。所以,想了半天,想通过查找单板名字字符串是否位于一个列表的方式实现。找了网上的教程,并不是特别多,所以将自己的解决办法总结下。
shell脚本
#!/bin/bash
list="aaa bbb ccc ddd eee fff"
echo $list | grep -q $1 #在ubp_board中搜索$1,如果找不到$? 的值将会非0,所有用这个作为判断条件。
if [ $? -eq 0 ];then
do_some_thing #位于列表
else
do_other_thing#不位于列表
fi
makefile
由于在makefile中同样需要用到这个场景,将shell脚本的方法直接搬到makefile中,发现会出现错误。估计兼容性存在问题。所以又上网找了半天,依然没有合适的办法,外国人有几个方案:见网址
GNU-make check if element exists in list/array
但是很遗憾,经过我的实验,这三种办法都行不通,各有各的问题。执行时出现失败。后来通过,如下的办法解决,见代码:
list="aaa bbb ccc ddd eee fff"
board=aaa
all:
ifeq ($(findstring $(board), $(list)), $(board))
@echo find
else
@echo not found
endif
执行结果如下:
[zhanged]$ make
find