
私は Fish バージョン 3.7.0 を実行しており、インデックスに基づいてリストから要素を削除する関数を記述したいと考えています。
たとえば、PATH 環境変数のインデックス 2 にある要素を削除したいとします。
set -l variable_name PATH
set -l index 2
set -e $variable_name[$index]
ただし、次のステートメントは機能せず、次の結果が返されます。
設定: --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]
分離するだけです。インデックスを に設定してを使用することもできます。$var
[$foo]
[2]
set -e $variable_name$index