Fish necesita una evulación perezosa para eliminar un elemento de una lista

Fish necesita una evulación perezosa para eliminar un elemento de una lista

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 $varparte [$foo]. Incluso establecer un índice [2]y utilizarlo set -e $variable_name$indexfunciona.

información relacionada