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有效。

相關內容