
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 $var
vom [$foo]
Teil trennen. Sogar das Setzen des Index auf [2]
und die Verwendung set -e $variable_name$index
funktionieren.