
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 $var
a [$foo]
parte. Até mesmo definir o índice [2]
e usar set -e $variable_name$index
funciona.