Nor*_*sey 4 dictionary associative-array fish
我正在迁移ksh到fish.我发现我错过了定义关联数组,哈希表,字典或任何你想要调用它的能力.有些情况可以模拟为
set dictionary$key $value
eval echo '$'dictionary$key
但这种方法受到很大限制; 例如,$key可能只包含字母,数字和下划线.
我知道这种fish方法是在一个可用的时候找到一个外部命令,但我有点不愿意将键值信息存储在文件系统中,即使在/run/user/<uid>那里,因为这限制了我的"通用"范围.
fish程序员如何解决缺少键值存储的问题?有一些简单的方法,我只是缺少?
这是我想要解决的问题的一个例子:我想修改这个fish_prompt函数,以便某些目录打印不使用prompt_pwd但使用特殊缩写.我当然可以使用switch命令执行此操作,但我宁愿使用通用字典,这样我就可以查找目录并查看它是否有缩写.然后我可以使用set而不是编辑函数来更改缩写.
您可以将键存储在一个变量中,将值存储在另一个变量中,然后使用类似的东西
if set -l index (contains -i -- foo $keys) # `set` won't modify $status, so this succeeds if `contains` succeeds
echo $values[$index]
end
Run Code Online (Sandbox Code Playgroud)
检索相应的值.
其他可能性包括在一个变量中的键和值之间交替,尽管迭代这是一个痛苦,特别是当你尝试仅使用内置函数时.或者您可以使用分隔符并将键值对存储为一个元素,但这对目录不起作用,因为变量不能包含\ 0(这是唯一可能的路径分隔符).