fish shell ---如何模拟或实现哈希表,关联数组或键值存储

时间:2016-10-12 22:15:07

标签: dictionary associative-array fish

我正在从ksh迁移到fish。我发现我错过了定义关联数组,哈希表,字典或任何你想要调用它的能力。有些情况可以模仿

set dictionary$key $value eval echo '$'dictionary$key

但这种方法受到严重限制;例如,$key可能只包含字母,数字和下划线。

我理解fish方法是在有一个可用的时候查找外部命令,但我有点不愿意将键值信息存储在文件系统中,即使在/run/user/<uid>中也是如此,因为将我限制在&#34;普遍&#34;范围。

fish程序员如何解决缺少键值存储的问题?有一些简单的方法,我只是缺少?

以下是我想要解决的问题的一个示例:我想修改fish_prompt函数,以便某些目录不使用prompt_pwd打印,而是使用特殊缩写。我当然可以使用switch命令执行此操作,但我更愿意使用通用字典,这样我就可以查找目录并查看它是否有缩写。然后我可以使用set更改缩写,而不必编辑函数。

2 个答案:

答案 0 :(得分:6)

您可以将键存储在一个变量中,将值存储在另一个变量中,然后使用类似

的内容
<script>
$("#all").change(function () {
$("input:checkbox").prop('checked', $(this).prop("checked"));       
});
$(".category1").click(function() {
if( $(this).prop("checked") == false)
{
$(".category1").attr("checked", false);
$("#all").attr("checked", false);
};
});
</script>

检索相应的值。

其他可能性包括在一个变量中交替键和值之间交替,尽管迭代这是一个痛苦,特别是当你尝试仅使用内置函数时。或者您可以使用分隔符并将键值对存储为一个元素,但这对目录不起作用,因为变量不能包含\ 0(这是唯一可能的路径分隔符)。

答案 1 :(得分:0)

这是我实施@faho提到的替代解决方案的方法

我正在使用'__'作为分隔符。

function set_field --argument-names dict key value
    set -g $dict'__'$key $value
end

function get_field --argument-names dict key
    eval echo \$$dict'__'$key
end