linux - 遍历数组以在 Bash 中搜索多个元素
问题描述
firstvar="PRIMARY"
secondvar="SECONDARY"
thirdvar="TERTIARY"
array=($firstvar $secondvar $thirdvar)
echo ${array[*]} //prints PRIMARY SECONDARY TERTIARY
我想在我的 bash 脚本中迭代这个数组,并检查 3 个元素(PRIMARY SECONDARY TERTIARY)
是否存在于数组中,并且没有特定的顺序。如果是,echo "Success.
如果不是,echo Failed
。什么是解决这个问题的好方法?
编辑:
我忘了提到如果数组中缺少一个元素(例如 PRIMARY),它也应该打印出Primary is missing.
对于类似的数组:
array_health=($firsthealth $secondhealth $thirdhealth)
这 3 个变量可以有 1 或其他我想检查数组中的这 3 个变量是否有 value=1,我将如何检查?它们未初始化为firsthealth=0
or firsthealth=1
。
解决方案
您可以一个一个地遍历元素:
flag=0
for ele in "$firstvar" "$secondvar" "$thirdvar"; do
if [[ ! " ${array[@]} " =~ " ${ele} " ]]; then
echo "$ele" is missing
flag=1
fi
done
if [[ flag -eq 0 ]]; then
echo "all there"
fi
如果您的元素可能有空格,那将使上面的测试不可靠。您可以使用不同的分隔符,printf
将左右分隔符添加到字符串中不太可能出现的字符:
firstvar="PRIMARY SECONDARY"
secondvar="SECONDARY"
thirdvar="TERTIARY"
array=("$firstvar" "$thirdvar")
flag=0
printf -v tgt "|%s|" "${array[@]}" # |ele1||ele2||eleN|
for ele in "$firstvar" "$secondvar" "$thirdvar"; do
if [[ ! "$tgt" =~ "|${ele}|" ]]; then
echo "$ele" is missing
flag=1
fi
done
if [[ flag -eq 0 ]]; then
echo "all there"
fi
印刷SECONDARY is missing
推荐阅读
- oop - 现代 Fortran getter/setter
- nhibernate - 如何在 NHibernate 5 中捕获查询执行?
- teradata - 在运行时在 mload 中动态传递输入文件
- c - 比较c linux fgets中的2个文件
- ios - 仅从第二次开始获取用户位置
- android - AsyncTask 导致重载问题(双项、错误数据等),但在 UI 上运行太慢
- excel - 如何使用 GetPivotdata 从由 Olap Cube 构建的数据透视表中提取数据?
- javascript - 如何在我的 Webpack 项目中使用 Polyglot.js?
- bash - 如何制作具有不同选择的菜单?
- linux - mail -s 在 bash 脚本中等待 CTRL+D