Fish precisa de uma avaliação preguiçosa para remover um elemento de uma lista

Fish precisa de uma avaliação preguiçosa para remover um elemento de uma lista

Estou executando o Fish versão 3.7.0 e quero escrever uma função para remover elementos de listas, com base em seu índice.

Por exemplo, quero remover o elemento da variável de ambiente PATH no índice 2:

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

No entanto, a instrução a seguir não funciona, ela retorna:

set: --erase: opção requer um argumento

Vejo que é necessária uma avaliação lenta para obter o nome da variável (por exemplo, PATH), mas não descobri como fazer isso.

Responder1

A questão é que fish é considerado $var[$foo]"o elemento footh de $var", onde você deseja "expandir $var, expandir $foo e anexar ambos".

Você pode usar várias maneiras de expressar o que deseja, a mais limpa provavelmente é:

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

Isto irá expandir o primeiro elemento de $variable_name ("PATH"), o outro []não será sintaticamente especial, então acabará rodando

set -e PATH[2]

como você quer.

As alternativas incluem aspas ( set -e "$variable_name"[$index]), expansões de chaves ( set -e {$variable_name}[$index]) - você realmente só precisa separar $vara [$foo]parte. Até mesmo definir o índice [2]e usar set -e $variable_name$indexfunciona.

informação relacionada