Використання {html,php,htm}може працювати тільки в якості розширення розпірки , яка є нестандартною (НЕ POSIX-сумісної) особливістю bash, kshі zsh.
Іншими словами: не намагайтеся використовувати його у скрипті, на який націлено, /bin/sh- у цьому випадку використовуйте явні численні --includeаргументи.
grepсама по собі не розуміє {...}позначення.
Щоб розпізнавання дужок було розпізнане, воно повинно бути без котирування (частиною а) маркера в командному рядку.
Розширення дужки розширюється на декілька аргументів , тож у випадку, коли під рукою ви grepбачите кілька --include=... варіантів, так, як якщо б ви їх передавали окремо.
Результати розширення дужок підлягають глобалізації (розширення назви файлів) , яка має підводні камені :
Кожен результуючий аргумент може бути розширений до відповідних імен файлів, якщо трапляється, що вони містять нецитовані глобальні метахарактери, такі як *.
Хоча це малоймовірно з такими лексемами, як-от --include=*.html(наприклад, вам доведеться мати файл, буквально названий чимось на зразок, --include=foo.htmlщоб щось збігалося), варто пам’ятати загалом.
Якщо параметр nullglobоболонки буде увімкнено ( shopt -s nullglob) і глобалізація нічого не відповідає , аргумент буде відкинуто .
Тому для повноцінного рішення використовуйте наступне:
grep -R '--include=*.'{html,php,htm} pattern /some/path
'--include=*.'трактується як буквальний , через те, що він котирується однозначно ; це запобігає ненавмисному трактуванню *як глобального характеру.
{html,php,htm}, То - за потребою - некотіровочное розширення распорного [1]
, розширюється до 3 -х аргументів, які, в зв'язку з {...} безпосередньо ідуть за '...'маркер , включають в себе , що маркер.
Отже, після видалення цитати оболонкою, в кінцевому підсумку передаються наступні 3 буквальні аргументиgrep :
--include=*.html
--include=*.php
--include=*.htm
[1] Точніше, цитувати слід лише ті, що стосуються синтаксису розширення дужки, елементи списку все ще можуть бути цитовані окремо і повинні бути, якщо вони містять глобальні метахарактеристики, які можуть призвести до небажаного глобулювання після розширення дужки; хоча це не потрібно в цьому випадку, вище можна записати як
'--include=*.'{'html','php','htm'}