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