我正在运行 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
有效。