Почему я получаю эту ошибку с помощью {1.. 9} в zsh?

Вы можете использовать kwargs для этого следующим образом:

def some_func(**kwargs):
    my_dict = dict(
        a=1,
        b=2,
        c=3,
        d=4
    )
    my_dict.update(**kwargs)

Это установит ваши значения по умолчанию, а затем переопределит их с помощью kwargs.

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

def some_func(a=1, b=2, c=3, d=4):
    my_dict = dict(
        a=a,
        b=b,
        c=c,
        d=d
    )

Это более безопасно и делает ваши намерения более понятными для того, кто читает ваш код. Но менее гибок по сравнению с kwargs.

9
задан chaos 30 April 2009 в 04:57
поделиться

1 ответ

Это не ошибка, и она прекрасно работает внутри слов. Проблема, с которой вы здесь столкнулись, заключается в том, что {1..9} не является подстановочным выражением, как * ; как показывает ваш эхо-пример, это итеративное расширение. Таким образом, ваш пример zgrep точно такой же, как если бы вы вводили каждую альтернативную версию в командную строку, а затем, поскольку в man2 нет man-страниц, начинающихся с zsh, происходит ошибка. (Причиной ошибки является невозможность найти совпадение, а не что-либо, что неразрывно связано с расширением последовательности фигурных скобок.)

Если вы сделали это, с другой стороны:

zgrep -c compinit /usr/share/man/man[1-9]/zsh*

вы получите ожидаемые результаты, потому что [1-9] - это нормальное групповое выражение.

10
ответ дан 4 December 2019 в 11:44
поделиться
Другие вопросы по тегам:

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