Оболонка може перетворити командний рядок перед виконанням команди. І оболонка, і grep
може використовувати цитування, щоб видалити особливе значення деяких символів. Тим не менш, grep
і снаряди мають різні особливі символи. Більше того, нерозроблені спеціальні символи, які не були результатом існуючого розширення, видаляються оболонкою перед виконанням команди.
echo '[]' | grep '[]'
Оболонка передає аргумент , []
щоб grep
і він обробляється як спотворене вираз кронштейна grep
.
echo '[]' | grep \[]
Вище ми можемо побачити подібний випадок. Зворотна косою рисою видаляється і []
передається як аргумент grep
. grep
розпізнає вираз неправильної форми дужки.
echo '[]' | grep '\[]'
Нарешті, у цьому випадку лапки видаляються оболонкою і \[]
передаються як аргумент, grep
але в даному конкретному випадку ¹ \[
інтерпретується grep
як буквальна дужка. Цитати потрібні для запобігання інтерпретації зворотної косої риси як оболонки спеціального символу.
¹ специфікація POSIX .
bash
включено)!
все ще розгорнуто в подвійних лапках, лише окремі лапки зупиняють його розширення (або вимикають варіант оболонки).