Fish нуждается в ленивом вычислении, чтобы удалить элемент из списка

Fish нуждается в ленивом вычислении, чтобы удалить элемент из списка

Я использую Fish версии 3.7.0 и хочу написать функцию для удаления элементов из списков на основе их индекса.

Например, я хочу удалить элемент из переменной среды PATH с индексом 2:

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

Однако следующий оператор не работает, он возвращает:

установить: --erase: опция требует аргумента

Я вижу, что для получения имени переменной (например, PATH) требуются некоторые ленивые вычисления, но я не понял, как это сделать.

решение1

Проблема в том, что fish принимает $var[$foo]как «элемент footh $var», тогда как вы хотите «расширить $var, расширить $foo и присоединить оба вместе».

Вы можете использовать различные способы выразить то, что вы хотите, но, пожалуй, самый понятный из них:

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

Это расширит первый элемент $variable_name ("PATH"), другой []не будет синтаксически специальным, поэтому в итоге будет выполнено

set -e PATH[2]

Как ты хочешь.

Альтернативы включают кавычки ( set -e "$variable_name"[$index]), раскрытия фигурных скобок ( set -e {$variable_name}[$index]) - вам действительно нужно просто отделить $varот [$foo]части. Даже установка индекса на [2]и использование set -e $variable_name$indexработает.

Связанный контент