Використання {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'}