我正在从ksh
迁移到fish
。我发现我错过了定义关联数组,哈希表,字典或任何你想要调用它的能力。有些情况可以模仿
set dictionary$key $value
eval echo '$'dictionary$key
但这种方法受到严重限制;例如,$key
可能只包含字母,数字和下划线。
我理解fish
方法是在有一个可用的时候查找外部命令,但我有点不愿意将键值信息存储在文件系统中,即使在/run/user/<uid>
中也是如此,因为将我限制在&#34;普遍&#34;范围。
fish
程序员如何解决缺少键值存储的问题?有一些简单的方法,我只是缺少?
以下是我想要解决的问题的一个示例:我想修改fish_prompt
函数,以便某些目录不使用prompt_pwd
打印,而是使用特殊缩写。我当然可以使用switch
命令执行此操作,但我更愿意使用通用字典,这样我就可以查找目录并查看它是否有缩写。然后我可以使用set
更改缩写,而不必编辑函数。
答案 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