我正在运行 Fish 版本 3.7.0,我想编写一个函数来根据索引从列表中删除元素。
例如,我想从 PATH 环境变量中删除索引 2 处的元素:
set -l variable_name PATH
set -l index 2
set -e $variable_name[$index]
然而,下面的语句不起作用,它返回:
set: --erase: 选项需要一个参数
我发现它需要一些惰性评估来获取变量名称(例如 PATH),但我不知道如何做到这一点。
我正在运行 Fish 版本 3.7.0,我想编写一个函数来根据索引从列表中删除元素。
例如,我想从 PATH 环境变量中删除索引 2 处的元素:
set -l variable_name PATH
set -l index 2
set -e $variable_name[$index]
然而,下面的语句不起作用,它返回:
set: --erase: 选项需要一个参数
我发现它需要一些惰性评估来获取变量名称(例如 PATH),但我不知道如何做到这一点。
问题是,fish 将其
$var[$foo]
视为“$var 的 footh 元素”,您需要“展开 $var,展开 $foo,并将两者附加在一起”。你可以用多种方式来表达你想要的东西,最简洁的可能是:
这将扩展 $variable_name ("PATH") 的第一个元素,另一个
[]
在语法上不会特殊,因此它将最终运行像你要的那样。
替代方案包括引用 (
set -e "$variable_name"[$index]
)、大括号扩展 (set -e {$variable_name}[$index]
) - 您实际上只需将 the$var
与[$foo]
部分分开即可。甚至设置索引[2]
并使用也set -e $variable_name$index
有效。