首页 > 解决方案 > 如何在 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

标签: arraysbash

解决方案


从 4.0 (2011) 版开始,Bash 内置了对关联数组的支持。

Bash 数组,包括索引数组和关联数组,都记录在这里——或者键入info bash,转到“Bash 功能”,然后转到“数组”。

要定义关联数组变量:

declare -A assoc

要设置一个值:

assoc[foo]=bar

要检索一个值:

echo "${assoc[foo]}" # print "bar"

其他操作参见手册。


推荐阅读