Fish benötigt eine Lazy-Evaluierung, um ein Element aus einer Liste zu entfernen

Fish benötigt eine Lazy-Evaluierung, um ein Element aus einer Liste zu entfernen

Ich verwende Fish, Version 3.7.0, und möchte eine Funktion schreiben, um Elemente basierend auf ihrem Index aus Listen zu entfernen.

Ich möchte beispielsweise das Element aus der Umgebungsvariable PATH am Index 2 entfernen:

set -l variable_name PATH
set -l index 2
set -e $variable_name[$index]

Die folgende Anweisung funktioniert jedoch nicht, sie gibt zurück:

set: --erase: Option erfordert ein Argument

Ich sehe, dass eine verzögerte Auswertung erforderlich ist, um den Variablennamen (z. B. PATH) zu erhalten, aber ich habe nicht herausgefunden, wie das geht.

Antwort1

Das Problem besteht darin, dass fish $var[$foo]„das footh-Element von $var“ nimmt, wo Sie „$var erweitern, $foo erweitern und beide zusammenfügen“ möchten.

Sie können Ihre Wünsche auf verschiedene Weise ausdrücken. Die klarste ist wahrscheinlich:

set -e $variable_name[1][$index]

Dadurch wird das erste Element von $variable_name ("PATH") erweitert, das andere []ist syntaktisch nicht speziell, sodass es am Ende ausgeführt wird

set -e PATH[2]

wie Sie möchten.

Alternativen sind Anführungszeichen ( set -e "$variable_name"[$index]), Klammererweiterungen ( set -e {$variable_name}[$index]) - Sie müssen wirklich nur das $varvom [$foo]Teil trennen. Sogar das Setzen des Index auf [2]und die Verwendung set -e $variable_name$indexfunktionieren.

verwandte Informationen