arrays - 如何在 Bash 中创建哈希等价物
问题描述
下面的代码片段迭代并检查大于定义值(100)的容器值。容器值是 SQL 查询的输出。
final=100
check=(`echo ${check} | sed 's/.*-//'`) # Array holding 5 entries
for i in "${check[@]}"
do
echo "Validating entries on: $i"
num=`A SQL QUERY INVOLVING ARRAY ENTRIES [${i}] & RETUNS AN INTEGER`
num=`echo ${num} | sed 's/.*-//'` # trims hyphens
if [[ "${num}" > "${final}" ]]; then
echo " num on ${i} didnt exceed the maximum: ${num}"
else
echo " num on ${i} under maximum: ${num}"
fi
done
我正在寻找大于阈值的值(${num})并以以下格式发送电子邮件:
echo -e "Container ${i}'s value has Exceeded threshold: ${num}" | mail -s "Prepare the cleanup scripts" <email_list>
但我不确定如何在 Bash 中生成类似于 Python 的格式的字典。我尝试了类似的东西mainA[${i}]="${num}"
然后
for i in "${!mainA[@]}"
do
echo "Count of $i
done
但它只返回容器值而不是容器名称。我需要容器名称及其相关值。
Bash 版本 - 4.2.46(2)-release
解决方案
从 4.0 (2011) 版开始,Bash 内置了对关联数组的支持。
Bash 数组,包括索引数组和关联数组,都记录在这里——或者键入info bash
,转到“Bash 功能”,然后转到“数组”。
要定义关联数组变量:
declare -A assoc
要设置一个值:
assoc[foo]=bar
要检索一个值:
echo "${assoc[foo]}" # print "bar"
其他操作参见手册。
推荐阅读
- reactjs - 在 React 中通过 url 导航到特定页面
- excel - 如何使用单元格中的值作为导入 CSV 文件的路径
- asp.net-core - ASP Core razor 页面生成与视图模型不同的数据
- c# - 如果“if 语句”成功或失败,如何将我的控制台标题设置为增加
- ios - 如何在 Xcode 10 中启用“推送到远程”?
- javascript - 卡在 Ajax 表单到 mysql 提交
- netcdf - 从 xarray 数据集创建 NetCDF 时经纬度错误
- rstudio - Rstudio:运行 R 代码的方法,但前提是之前的代码行成功?
- reactjs - 如何使 Link/NavLink 路径更短
- c++ - 在一个变量中保存两种不同的返回类型