【发布时间】:2020-04-22 17:09:52
【问题描述】:
我有两个相同数量的子字符串除以分隔符。
我需要从子字符串创建键值对。
简短的例子: 输入:
firstString='00011010:00011101:00100001'
secondString='H:K:O'
delimiter=':'
想要的结果:
${translateMap['00011010']} -> 'H'
${translateMap['00011101']} -> 'K'
${translateMap['00100001']} -> 'O'
所以,我写道:
IFS="$delimiter" read -ra fromArray <<< "$firstString"
IFS="$delimiter" read -ra toArray <<< "$secondString"
declare -A translateMap
curIndex=0
for from in "${fromArray[@]}"; do
translateMap["$from"]="${toArray[curIndex]}"
((curIndex++))
done
有没有什么方法可以直接从 2 个字符串创建关联数组,而不需要不需要的数组和循环?比如:
IFS="$delimiter" read -rA translateMap["$(read -ra <<< "$firstString")"] <<< "$secondString"
有可能吗?
【问题讨论】:
-
恐怕不可能在没有循环的情况下分配所有内容(除了使用其他工具创建 bash 命令然后使用
eval/declare之外)。我检查了bash manual 中关键字associative的所有匹配项,但找不到任何有用的信息。
标签: bash split associative-array