Печать всех переменных, начинающихся с foo, в zsh

Я делал что-то похожее. Вы используете oh-my-zsh? Если да, убедитесь, что вы включили плагин zsh-completions в вашем .zshrc файле. Я бы также рекомендовал плагин zsh-autosuggestions.

После этого вам нужно добавить следующее в файл .zshrc (если его там еще нет)

fpath=(~/.zsh/completions $fpath)
autoload -U compinit && compinit
1
17.06.2016, 12:49
2 ответа
  1. Как вывести все параметры, начинающиеся с foo:

    declare -p ${(Mk)parameters:#foo*}
    

    Все переменные хранятся в ассоциативном массиве parameters, поэтому достаточно вывести все его ключи (k) и поискать паттерн foo*. Флаг (M) присутствует для удаления несовпадающих элементов.

    Output:

    typeset foo_a=1
    typeset foo_b=2
    

    (обратите внимание, что declare - то же самое, что typeset).


  1. Вставка не работает так, как ожидалось, из-за недавно появившейся функции под названием bracketed_paste:

    zle_bracketed_paste

    Многие эмуляторы терминалов имеют функцию, которая позволяет приложениям определять, когда текст вставляется в терминал. когда текст вставляется в терминал, а не набирается обычным образом. Для ZLE это означает, что специальные символы, такие как табуляция и новая строка, могут быть вместо того, чтобы вызывать команды редактора. Кроме того, вставленный текст формирует одно событие отмены, и если область активна, вставленный текст заменит регион.

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

    Просто снимите значение, если оно вам не нравится:

    unset zle_bracketed_paste
    
2
27.01.2020, 23:35

@jimmij дал отличный ответ, и это работает в общем случае для печати совпадений с шаблоном для каждого ключа в ассоциативном массиве.

Однако в случае переменных окружения zshесть встроенное -решение, которое я нашел с помощью команды typeset, когда читал man zshbuiltins.

Вы можете просто использовать опцию typeset's -mи предоставить в кавычках шаблон имен параметров, которые вы пытаетесь сопоставить.

Печать переменных среды, соответствующих шаблону

  • Просто имя переменной:

    typeset +m 'foo*'
    
    foo
    foo_fighters
    food
    
  • Имя переменной и присвоенное значение:

    typeset -m 'foo*'
    
    foo=bar
    foo_fighters=awesome
    food=(my life)
    
  • Набор флагов, имя переменной и присвоенное значение

    typeset -p -m 'foo*'
    
    typeset foo=bar
    typeset foo_fighters=awesome
    typeset -a food=( my life )
    
1
24.03.2020, 19:59

Теги

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