bash - Bash 中的双向哈希?
问题描述
我从 bash 脚本调用二进制文件 [用于通过 IP 设置外部设备的状态],其参数不是(容易)人类可读(有意义)。例如“video2,cbl,sat”
因此,我使用对用户更友好的参数(例如“amazon”)调用 bash 脚本,并使用关联数组来获取不友好的参数:
declare -A state=( [amazon]="video2,cbl,sat" )
input_arg=${state[amazon]}
/usr/bin/set_state source:"$input_arg"
当我设置时这很好state
,但我还需要获取state
并将其返回给 [human] 用户,所以我有反向哈希:
declare -A current_state=( [video2,cbl,sat]="amazon" )
output=$(/usr/bin_get_state)
friendly_output=${current_state["$output"]}
echo "$friendly_output"
有没有办法在不维护两个这样的数组的情况下在 bash 中进行双向哈希?
同一个数组可用于存储两个方向的地图。它会起作用,但感觉不太对劲!
解决方案
Bash 没有提供任何方法来反转散列,因此您需要自己逐个键对其进行迭代。
#!/bin/bash
declare -A state
state=([amazon]="video2,cbl,sat"
[netflix]="video3,cbl,inet")
declare -A current_state
for key in "${!state[@]}" ; do
current_state["${state[$key]}"]=$key
done
您可能需要验证这些值是否唯一:
for key in "${!state[@]}" ; do
if [[ ${current_state["${state[$key]}"]} ]] ; then # Fix your syntax HL, SO! "
echo Duplicate "$key". >&2
exit 1
fi
...
推荐阅读
- azure - 保存和重新训练的 QnA Maker KB 元数据限制
- c - 仅在循环结束时才需要获取输出
- express - replit.com - 使用 Secrets 连接到 mongoose
- c# - 使用 SharpDX 调整 Texture2D(打印屏幕)的大小
- c - 编译器在 C 中的向量加法运算中读取的第一个向量是什么?
- asp.net-core - OpenIddict:在 ASP.NET Core 应用程序和 WEB.API 应用程序之间共享身份验证
- javascript - script.googleusercontent.com 拒绝连接 webapp href 链接不起作用
- java - sol1 的原始类型 double 没有字段 sol2
- bash - Git:将项目文件夹推送到他们的存储库中
- java - 在 JavaFX 中,当鼠标按下并进入节点时触发事件