
Estoy ejecutando Fish versión 3.7.0 y quiero escribir una función para eliminar elementos de las listas, según su índice.
Por ejemplo, quiero eliminar el elemento de la variable de entorno PATH en el índice 2:
set -l variable_name PATH
set -l index 2
set -e $variable_name[$index]
Sin embargo, la siguiente declaración no funciona, devuelve:
set: --erase: la opción requiere un argumento
Veo que requiere una evaluación diferida para obtener el nombre de la variable (por ejemplo, RUTA), pero no encontré cómo hacerlo.
Respuesta1
El problema es que fish toma $var[$foo]
como "el elemento base de $var", donde desea "expandir $var, expandir $foo y unir ambos".
Puedes utilizar una variedad de formas para expresar lo que quieres, la más limpia probablemente sea:
set -e $variable_name[1][$index]
Esto expandirá el primer elemento de $variable_name ("PATH"), el otro []
no será sintácticamente especial, por lo que terminará ejecutándose.
set -e PATH[2]
como quieras.
Las alternativas incluyen comillas ( set -e "$variable_name"[$index]
), expansiones de llaves ( set -e {$variable_name}[$index]
); en realidad, solo necesita separar la $var
parte [$foo]
. Incluso establecer un índice [2]
y utilizarlo set -e $variable_name$index
funciona.