Заполнить терминал выбранными кандидатами после нечеткого поиска с помощью fzf с помощью привязки клавиш?

Если вы не возражаете против использования подстановки команд, существует функция, которая позволит вам возвращать строки, -eval'd вызывающей программе, что позволяет вам вызывать run_local_var_assignmentsсозданную вами функцию таким образом:

$(run_local_var_assignments)

Функция выглядит так:

emit () {
  local IFS=$'\n'
  printf 'eval eval %q' "$*"
}

Он выдает оператор eval, очень похожий на ваш eval "$variable_name"выше. Поскольку это первая вещь в результирующей строке, bash запускает сгенерированный eval как команду.

Двойное вычисление и экранирование %q, выполняемые функцией, существуют просто потому, что они необходимы для правильной передачи символов новой строки и других специальных символов вызывающей программе.

Ваша функция может быть записана:

run_local_var_assignments () {
  local assignments=()
  assignments+=( 'local myvar1="my value1"' )
  assignments+=( 'local myvar2="my value2"' )
  emit "${assignments[@]}"
}

Присваивания записываются так же, как если бы они были исходным кодом, поэтому такие вещи, как пробелы в значениях, требуют кавычек, как указано выше.

Вызов этой функции в подстановке команд (, как указано в верхней части этого ответа ), создаст эти локальные переменные в области действия вызывающей стороны с этими значениями.

Вы также можете использовать обычную строку или heredoc вместо массива операторов, но я часто нахожу метод массива полезным для динамического построения блока операторов, поэтому я решил показать, что это даже немного сложнее. сложный.

4
02.06.2020, 06:47
0 ответов

Теги

Похожие вопросы