11*(15)
использует расширенный синтаксис глобуса, специфичный для Bash. Вы случайно наткнулись на него, подчеркивая, почему кавычки - хорошая идея. (Я также многому научился выяснять, почему это работает по-другому для меня; спасибо за это.)
Поведение
echo 11*(15)
в bash будет зависеть от того, включен ли extglob
. Если он включен, *(PATTERN-LIST)
соответствует нулю или большему количеству вхождений паттернов. Если он отключен, он этого не делает, и в результате (
может вызвать синтаксическую ошибку.
Например:
$ ls
11 115 1155 11555 115555
$ shopt -u extglob
$ echo 11*(55)
bash: syntax error near unexpected token `('
$ shopt -s extglob
$ echo 11*(55)
11 1155 115555
$
(Это объясняет странное поведение, которое я обсуждал в комментариях.)
Цитирование из документации bash 4.2.8 (info bash
):
Если опция оболочки extglob включена с помощью встроенной команды shopt,
распознаются несколько расширенных операторов сопоставления с образцом. в
В следующем описании PATTERN-LIST представляет собой список из одного или нескольких
шаблоны, разделенные `| '. Составные узоры могут быть сформированы с использованием
один или несколько из следующих подэлементов:
`? (Шаблон)»
Соответствует нулю или одному вхождению данных паттернов.
`* (шаблон)»
Соответствует нулю или более вхождений данных шаблонов.
`+ (шаблон)»
Соответствует одному или нескольким вхождениям данных шаблонов.
`@ (шаблон)»
Соответствует одному из заданных шаблонов.
`! (Шаблон)»
Совпадает с чем угодно, кроме одного из указанных шаблонов.