Fish 需要惰性计算来从列表中删除元素

Fish 需要惰性计算来从列表中删除元素

我正在运行 Fish 版本 3.7.0,我想编写一个函数来根据索引从列表中删除元素。

例如,我想从 PATH 环境变量中删除索引 2 处的元素:

set -l variable_name PATH
set -l index 2
set -e $variable_name[$index]

然而,下面的语句不起作用,它返回:

set: --erase: 选项需要一个参数

我发现它需要一些惰性评估来获取变量名称(例如 PATH),但我不知道如何做到这一点。

答案1

问题是,fish 将其$var[$foo]视为“$var 的 footh 元素”,您需要“展开 $var,展开 $foo,并将两者附加在一起”。

你可以用多种方式来表达你想要的东西,最简洁的可能是:

set -e $variable_name[1][$index]

这将扩展 $variable_name 的第一个元素(“PATH”),另一个元素[]在语法上没有特殊之处,因此最终将运行

set -e PATH[2]

像你要的那样。

替代方案包括引用 ( set -e "$variable_name"[$index])、大括号扩展 ( set -e {$variable_name}[$index]) - 您实际上只需将 the$var[$foo]部分分开即可。甚至设置索引[2]并使用也set -e $variable_name$index有效。

相关内容